发送邮件方式

本文介绍了一个用于Java应用中发送邮件的实用类EmailUtil。该类支持通过SMTP协议发送带附件的HTML或纯文本格式邮件,并能处理中文字符集。此外,还提供了使用代理服务器的功能及批量发送邮件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 * 创建日期 2005-10-16
 *
 * TODO 要更改此生成的文件的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
package com.email.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Date;
import java.util.Properties;
import java.util.Vector;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import org.apache.commons.codec.binary.Base64;

import com.db.DatabaseImp;
import com.email.config.EmailConfig;
import com.email.portal.EmailData;

/**
 * @author nakata
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class EmailUtil {
    String host = ""; //邮件服务器ip
    String port = ""; //邮件服务器端口
    String username = ""; //登陆用户名密码
    String password = "";
   
    String socksProxyHost = ""; //代理ip
    String socksProxyPort = ""; //代理端口

    public boolean sendEmail(String adjuncts[],String frommail,String fromname,
                               String tomails[],String ccmails[],
                         String contenttype,String sendtxt,String subject){
     boolean flag=true;

     //代理
     if(socksProxyHost!=null&&!"".equals(socksProxyHost.trim())&&
       socksProxyPort!=null&&!"".equals(socksProxyPort.trim())){
      System.getProperties().put("socksProxySet","true");
            System.getProperties().put("socksProxyHost",socksProxyHost);   //10.210.1.35
            System.getProperties().put("socksProxyPort",socksProxyPort);   //1080
     }
     
     Properties props = System.getProperties();
     props.put("mail.smtp.host", host);               //218.94.62.106
     //默认端口不是25的指定一个端口
     if(port!=null&&!"".equals(port)&&!"25".equals(port)){
         props.put("mail.smtp.port", port);
     }
     
     Session session = null;
     if(username!=null&&!"".equals(username)){ //需要登陆认证的
            props.put("mail.smtp.auth", "true");
            session = Session.getDefaultInstance(props,
                    new Authenticator() {
                        public PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication(username, password);
                        }
                    });
     }else{      //不需要登陆认证的
            props.put("mail.smtp.auth", "false");
            session = Session.getInstance(props, null);
     }
     
     try {
      MimeMessage msg = new MimeMessage(session);
      if(fromname==null) fromname = "";
      fromname = "=?GB2312?B?" + new String(Base64.encodeBase64((fromname).getBytes())) + "?=";
      msg.setFrom(new InternetAddress(frommail, fromname));  //发送人地址和名称***@lianchuang.com

         InternetAddress[] toaddress = new InternetAddress[tomails.length];
         //接收人地址
         for(int i=0;i<tomails.length;i++){
          toaddress[i]=new InternetAddress(tomails[i]);
         }
         msg.setRecipients(Message.RecipientType.TO, toaddress);
         //抄送人地址
         if(ccmails!=null){
          InternetAddress[] ccaddress = new InternetAddress[ccmails.length];
             for(int i=0;i<ccmails.length;i++){
              ccaddress[i]=new InternetAddress(ccmails[i]);
             }
             msg.setRecipients(Message.RecipientType.CC, ccaddress);
         }
        
         Multipart mp = new MimeMultipart();
         //主题
         if(subject!=null){
             //msg.setSubject(subject,"GBK");
             msg.setSubject("=?GB2312?B?" + new String(Base64.encodeBase64((subject).getBytes())) + "?=");
         }
         //发送内容
         if(sendtxt!=null){
             MimeBodyPart mbp1 = new MimeBodyPart();
             if(contenttype.equals("1")){
              mbp1.setContent(sendtxt,"text/html;charset=GBK");
             }else{
              mbp1.setText(sendtxt,"GBK");
             }
             mp.addBodyPart(mbp1);
         }
         msg.setContent(mp);
         //附件
         if(adjuncts!=null){
             for(int i=0;i<adjuncts.length;i++){
              MimeBodyPart mbp2 = new MimeBodyPart();
                    FileDataSource fds = new FileDataSource(adjuncts[i]);
                 mbp2.setDataHandler(new DataHandler(fds));
                 mbp2.setFileName(fds.getName());
                 mp.addBodyPart(mbp2);
             }
         }
         msg.setSentDate(new Date());
        
         //发送定制好的邮件
         Transport.send(msg);
     }catch (Exception e){
      System.out.println("-||||--"+e.toString());
      flag=false;
     }
     return flag;
    }
   
    //批量发送
    public boolean sendEmail(Vector vEmailData){
        String adjuncts[]=null;  //附件
        String frommail="";   //发送人地址
        String fromname="";   //发送人名称
        String tomails[]=null;  //接收人
        String ccmails[]=null;  //抄送人
  String contenttype="";  //内容格式
  String sendtxt="";   //内容 
  String subject="";   //主题
  
     boolean flag=true;
     //代理
     if(socksProxyHost!=null&&!"".equals(socksProxyHost.trim())&&
       socksProxyPort!=null&&!"".equals(socksProxyPort.trim())){
      System.getProperties().put("socksProxySet","true");
            System.getProperties().put("socksProxyHost",socksProxyHost);   //10.210.1.35
            System.getProperties().put("socksProxyPort",socksProxyPort);   //1080
     }
     
     Properties props = System.getProperties();
     props.put("mail.smtp.host", host);               //218.94.62.106
     //默认端口不是25的指定一个端口
     if(port!=null&&!"".equals(port)&&!"25".equals(port)){
         props.put("mail.smtp.port", port);
     }
     
     Session session = null;
     if(username!=null&&!"".equals(username)){ //需要登陆认证的
            props.put("mail.smtp.auth", "true");
            session = Session.getDefaultInstance(props,
                    new Authenticator() {
                        public PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication(username, password);
                        }
                    });
     }else{      //不需要登陆认证的
            props.put("mail.smtp.auth", "false");
            session = Session.getInstance(props, null);
     }
     
     try {
      MimeMessage msg = new MimeMessage(session);
      
      if(vEmailData==null||vEmailData.size()==0)
          return flag;
      
            for(int j=0;j<vEmailData.size();j++){
                EmailData ed=(EmailData)vEmailData.elementAt(j);
                adjuncts = ed.getAdjunctsCode();
                frommail = ed.getSendCode();
                fromname = ed.getSendName();
                tomails = ed.getReceiveCode();
                ccmails = ed.getCopierCode();
                contenttype = ed.getContentType();
                sendtxt = ed.getEmContent();
                subject = ed.getEmSubject();

                if(fromname==null) fromname = "";
                fromname = "=?GB2312?B?" + new String(Base64.encodeBase64((fromname).getBytes())) + "?=";
          msg.setFrom(new InternetAddress(frommail, fromname));  //发送人***@lianchuang.com
          InternetAddress[] toaddress = new InternetAddress[tomails.length];
          //接收人地址
          for(int i=0;i<tomails.length;i++){
           toaddress[i]=new InternetAddress(tomails[i]);
          }
          msg.setRecipients(Message.RecipientType.TO, toaddress);
          //抄送人地址
          if(ccmails!=null){
           InternetAddress[] ccaddress = new InternetAddress[ccmails.length];
              for(int i=0;i<ccmails.length;i++){
               ccaddress[i]=new InternetAddress(ccmails[i]);
              }
              msg.setRecipients(Message.RecipientType.CC, ccaddress);
          }
         
          Multipart mp = new MimeMultipart();
          //主题
          if(subject!=null){
              //msg.setSubject(subject,"GBK");
              msg.setSubject("=?GB2312?B?" + new String(Base64.encodeBase64((subject).getBytes())) + "?=");
          }
          //发送内容
          if(sendtxt!=null){
              MimeBodyPart mbp1 = new MimeBodyPart();
              if(contenttype.equals("1")){
               mbp1.setContent(sendtxt,"text/html;charset=GBK");
              }else{
               mbp1.setText(sendtxt,"GBK");
              }
              mp.addBodyPart(mbp1);
          }
          msg.setContent(mp);
          //附件
          if(adjuncts!=null){
              for(int i=0;i<adjuncts.length;i++){
               MimeBodyPart mbp2 = new MimeBodyPart();
                     FileDataSource fds = new FileDataSource(adjuncts[i]);
                  mbp2.setDataHandler(new DataHandler(fds));
                  mbp2.setFileName(fds.getName());
                  mp.addBodyPart(mbp2);
              }
          }
          msg.setSentDate(new Date());
         
          //发送定制好的邮件
          Transport.send(msg);
          //已发送
          ed.setStatus(1);
            }
     }catch (Exception e){
      System.out.println("-||||--"+e.toString());
      flag=false;
     }
     return flag;
    }

    /**
     * @return 返回 host。
     */
    public String getHost() {
        return host;
    }
    /**
     * @param host 要设置的 host。
     */
    public void setHost(String host) {
        this.host = host;
    }
    /**
     * @return 返回 password。
     */
    public String getPassword() {
        return password;
    }
    /**
     * @param password 要设置的 password。
     */
    public void setPassword(String password) {
        this.password = password;
    }
    /**
     * @return 返回 port。
     */
    public String getPort() {
        return port;
    }
    /**
     * @param port 要设置的 port。
     */
    public void setPort(String port) {
        this.port = port;
    }
    /**
     * @return 返回 socksProxyHost。
     */
    public String getSocksProxyHost() {
        return socksProxyHost;
    }
    /**
     * @param socksProxyHost 要设置的 socksProxyHost。
     */
    public void setSocksProxyHost(String socksProxyHost) {
        this.socksProxyHost = socksProxyHost;
    }
    /**
     * @return 返回 socksProxyPort。
     */
    public String getSocksProxyPort() {
        return socksProxyPort;
    }
    /**
     * @param socksProxyPort 要设置的 socksProxyPort。
     */
    public void setSocksProxyPort(String socksProxyPort) {
        this.socksProxyPort = socksProxyPort;
    }
    /**
     * @return 返回 username。
     */
    public String getUsername() {
        return username;
    }
    /**
     * @param username 要设置的 username。
     */
    public void setUsername(String username) {
        this.username = username;
    }
   
   
    public static void main(String args[]) {
        EmailUtil eu = new EmailUtil();
        eu.setHost("10.210.1.48");
        eu.setUsername("report");
        eu.setPassword("123456");
        eu.setSocksProxyHost("10.210.1.35");
        eu.setSocksProxyPort("1080");

       
        boolean b = eu.sendEmail(null, "report@unicomgd.com", "省计费报表中心",  new String[]{"13322810498@cumail.com.cn"}, null,
                                  "0", "彩Etest...中文", "百日争收战报(20051205)");
       
        System.out.println(b+"|||||||||");
       
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值