`
liyonghui160com
  • 浏览: 761661 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javax.mail发送带附件的邮件代码

    博客分类:
  • java
阅读更多

 

javax.mail发送带附件的邮件代码

 

package com.dc.mail;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.*;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;


public class SendMail {
    //定义发件人、收件人、SMTP服务器、用户名、密码、主题、内容等
    private String displayName="DataCheck";
    private String[] to;
    private String from;
    private String smtpServer= "smtp.163.com";
    private String username;
    private String password;
    private String subject="DataCheckMail";
    private String content;
    private boolean ifAuth; //服务器是否要身份认证

    private Vector file = new Vector(); //用于保存发送附件的文件名的集合

    private Log log = LogFactory.getLog(getClass());



    /**
     * 设置SMTP服务器地址
     */
    public void setSmtpServer(String smtpServer){
        this.smtpServer=smtpServer;
    }

    /**
     * 设置发件人的地址
     */
    public void setFrom(String from){
        this.from=from;
    }
    /**
     * 设置显示的名称
     */
    public void setDisplayName(String displayName){
        this.displayName=displayName;
    }

    /**
     * 设置服务器是否需要身份认证
     */
    public void setIfAuth(boolean ifAuth){
        this.ifAuth=ifAuth;
    }

    /**
     * 设置E-mail用户名
     */
    public void setUserName(String username){
        this.username=username;
    }

    /**
     * 设置E-mail密码
     */
    public void setPassword(String password){
        this.password=password;
    }

    /**
     * 设置接收者
     */
    public void setTo(String[] to){
        this.to=to;
    }

    /**
     * 设置主题
     */
    public void setSubject(String subject){
        this.subject=subject;
    }

    /**
     * 设置主体内容
     */
    public void setContent(String content){
        this.content=content;
    }

    /**
     * 该方法用于收集附件名
     */
    public void addAttachfile(String fname){
        file.addElement(fname);
    }

    public SendMail(){
    }

    /**
     * 初始化SMTP服务器地址、发送者E-mail地址、用户名、密码、接收者、主题、内容
     */
    public SendMail(String smtpServer,String from,String displayName,String username,String password,String[] to,String subject,String content){
        this.smtpServer=smtpServer;
        this.from=from;
        this.displayName=displayName;
        this.ifAuth=true;
        this.username=username;
        this.password=password;
        this.to=to;
        this.subject=subject;
        this.content=content;
    }

    /**
     * 初始化SMTP服务器地址、发送者E-mail地址、接收者、主题、内容
     */
    public SendMail(String smtpServer,String from,String displayName,String[] to,String subject,String content){
        this.smtpServer=smtpServer;
        this.from=from;
        this.displayName=displayName;
        this.ifAuth=false;
        this.to=to;
        this.subject=subject;
        this.content=content;
    }

    /**
     * 发送邮件
     */
    public void send(){
        String filename="";
        String message="邮件发送成功!";
        Session session=null;
        Properties props = System.getProperties();
        props.put("mail.smtp.host", smtpServer);
        if(ifAuth){ //服务器需要身份认证
            props.put("mail.smtp.auth","true");
            SmtpAuth smtpAuth=new SmtpAuth(username,password);
            session=Session.getDefaultInstance(props, smtpAuth);
        }else{
            props.put("mail.smtp.auth","false");
            session=Session.getDefaultInstance(props, null);
        }
        session.setDebug(true);
        Transport trans = null;
        try {
            Message msg = new MimeMessage(session);
            try{
                Address from_address = new InternetAddress(from, displayName);
                msg.setFrom(from_address);
            }catch(java.io.UnsupportedEncodingException e){
                e.printStackTrace();
            }
            // 创建邮件的接收者地址,并设置到邮件消息中
            Address[] address = new InternetAddress[to.length];
                for (int i=0; i<to.length; i++) {
                    address[i] = new InternetAddress(to[i]);
                }
            msg.setRecipients(Message.RecipientType.TO,address);
            msg.setSubject(subject);
            Multipart mp = new MimeMultipart();
            MimeBodyPart mbp = new MimeBodyPart();
            mbp.setContent(content.toString(), "text/html;charset=gb2312");
            mp.addBodyPart(mbp);
            if(!file.isEmpty()){//有附件
                Enumeration efile=file.elements();
                while(efile.hasMoreElements()){
                    mbp=new MimeBodyPart();
                    filename=efile.nextElement().toString(); //选择出每一个附件名
                    FileDataSource fds=new FileDataSource(filename); //得到数据源
                    mbp.setDataHandler(new DataHandler(fds)); //得到附件本身并至入BodyPart
                    mbp.setFileName(fds.getName());  //得到文件名同样至入BodyPart
                    mp.addBodyPart(mbp);
                }
                file.removeAllElements();
            }
            msg.setContent(mp); //Multipart加入到信件
            msg.setSentDate(new Date());     //设置信件头的发送日期
            //发送信件
            msg.saveChanges();
            trans = session.getTransport("smtp");
            trans.connect(smtpServer, username, password);
            trans.sendMessage(msg, msg.getAllRecipients());
            trans.close();
            log.debug("邮件发送成功!");
        }catch(AuthenticationFailedException e){
            message="邮件发送失败!错误原因:身份验证错误!";
            log.error(message+e.getMessage());
        }catch (MessagingException e) {
            message="邮件发送失败!错误原因:\n"+e.getMessage();
            log.error(message+e.getMessage());
            Exception ex = null;
            if ((ex = e.getNextException()) != null) {
                log.error(e.getNextException());
            }
        }
    }
    public static void main(String[] args)
    {

        SendMail sendMail=new SendMail("smtp.XX.com","lXX@XX.com","DataCheck","lXX","XXXXXX!@#",new String[]{"lXX@XX.com","xiaoqiang@XX.com"},"DataCheckMail","测试一下");
        sendMail.addAttachfile("D:\\123.xls");
        sendMail.send();

    }


}

 

SmtpAuth代码

 

package com.dc.mail;


public class SmtpAuth extends javax.mail.Authenticator {
    private String username,password;

    public SmtpAuth(String username,String password){
        this.username = username;
        this.password = password;
    }
    protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
        return new javax.mail.PasswordAuthentication(username,password);
    }
}

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics