爪哇国新游记之三十二----邮件发送

由三个类完成任务,第一个为主,main中是用法示例。

纯邮件发送和带附件发送邮件皆可,大家请参照main函数中用法。

package com.ufo.util.mail;

import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
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;

/**
 * 邮件发送基类
 */
public class BaseMailService{
    protected String smtpServer;
    protected String smtpUsername;
    protected String smtpPassword;
    protected String from;
    protected String to;
    protected String cc;
    protected String bcc;

    /**
     * 无参构造函数
     */
    public BaseMailService(){
        
    }
    
    /**
     * 发送邮件,无附件
     * 
     * @param title
     * @param content
     * @return
     * @throws Exception
     */
    public boolean sendMail(String title,String content) throws Exception{
        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.host", smtpServer);
        // 获得邮件会话对象
        Session session = Session.getDefaultInstance(props,new SmtpAuthenticator(smtpUsername, smtpPassword));
        /** *************************************************** */
        // 创建MIME邮件对象
        MimeMessage mimeMessage = new MimeMessage(session);
        mimeMessage.setFrom(new InternetAddress(from));// 发件人
        
        // To收件人
        mimeMessage.setRecipients(Message.RecipientType.TO, getInternetAddressArr(to));
        
        // Cc收件人
        InternetAddress[] arr=getInternetAddressArr(cc);
        if(arr!=null && arr.length>0 ){
            mimeMessage.setRecipients(Message.RecipientType.CC, getInternetAddressArr(cc));
        }
        
        // Bcc收件人
        arr=getInternetAddressArr(bcc);
        if(arr!=null && arr.length>0){
            mimeMessage.setRecipients(Message.RecipientType.BCC, getInternetAddressArr(bcc));
        }
        
        mimeMessage.setSubject(title);
        mimeMessage.setSentDate(new Date());// 发送日期
        Multipart mp = new MimeMultipart("related");// related意味着可以发送html格式的邮件
        /** *************************************************** */
        BodyPart bodyPart = new MimeBodyPart();// 正文
        bodyPart.setDataHandler(new DataHandler(content,"text/html;charset=utf8"));// 网页格式
        mp.addBodyPart(bodyPart);
        mimeMessage.setContent(mp);// 设置邮件内容对象
        
        Transport.send(mimeMessage);// 发送邮件
        
        return true;
    }
    
    /**
     * 发带附件的邮件
     * @param title
     * @param content
     * @param files
     * @return
     * @throws Exception
     */
    public boolean sendMail(String title,String content,String[] files) throws Exception{
        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.host", smtpServer);
        // 获得邮件会话对象
        Session session = Session.getDefaultInstance(props,new SmtpAuthenticator(smtpUsername, smtpPassword));
        /** *************************************************** */
        // 创建MIME邮件对象
        MimeMessage mimeMessage = new MimeMessage(session);
        mimeMessage.setFrom(new InternetAddress(from));// 发件人
        
        // To收件人
        mimeMessage.setRecipients(Message.RecipientType.TO, getInternetAddressArr(to));
        
        // Cc收件人
        InternetAddress[] arr=getInternetAddressArr(cc);
        if(arr!=null && arr.length>0 ){
            mimeMessage.setRecipients(Message.RecipientType.CC, getInternetAddressArr(cc));
        }
        
        // Bcc收件人
        arr=getInternetAddressArr(bcc);
        if(arr!=null && arr.length>0){
            mimeMessage.setRecipients(Message.RecipientType.BCC, getInternetAddressArr(bcc));
        }
        
        mimeMessage.setSubject(title);
        mimeMessage.setSentDate(new Date());// 发送日期
        Multipart mp = new MimeMultipart("related");// related意味着可以发送html格式的邮件
        /** *************************************************** */
        BodyPart bodyPart = new MimeBodyPart();// 正文
        bodyPart.setDataHandler(new DataHandler(content,"text/html;charset=utf8"));// 网页格式
        mp.addBodyPart(bodyPart);
        mimeMessage.setContent(mp);// 设置邮件内容对象
        
        // 附件部分
        if(files!=null && files.length>0){
            for(String affix:files){
                //添加附件
                BodyPart messageBodyPart= new MimeBodyPart();
                
                DataSource source = new FileDataSource(affix);
                //添加附件的内容
                messageBodyPart.setDataHandler(new DataHandler(source));
                //添加附件的标题
                messageBodyPart.setFileName(affix);
                mp.addBodyPart(messageBodyPart);
            }
        }
        
        Transport.send(mimeMessage);// 发送邮件
        
        return true;
    }
    
    /**
     * Mail地址转化
     * @param mialAddr
     * @return
     * @throws Exception
     */
    protected InternetAddress[] getInternetAddressArr(String mialAddr) throws Exception{
        if(mialAddr==null){
            return null;
        }
        
        String[] arr=mialAddr.split(",");
        
        InternetAddress[] retval=new InternetAddress[arr.length];
        
        for(int i=0;i<arr.length;i++){
            retval[i]=new InternetAddress(arr[i]);
        }
        
        return retval;
    }
    
    public String getSmtpServer() {
        return smtpServer;
    }
    public void setSmtpServer(String smtpServer) {
        this.smtpServer = smtpServer;
    }
    public String getSmtpUsername() {
        return smtpUsername;
    }
    public void setSmtpUsername(String smtpUsername) {
        this.smtpUsername = smtpUsername;
    }
    public String getSmtpPassword() {
        return smtpPassword;
    }
    public void setSmtpPassword(String smtpPassword) {
        this.smtpPassword = smtpPassword;
    }
    
    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getTo() {
        return to;
    }

    public void setTo(String to) {
        this.to = to;
    }

    public String getCc() {
        return cc;
    }

    public void setCc(String cc) {
        this.cc = cc;
    }

    public String getBcc() {
        return bcc;
    }

    public void setBcc(String bcc) {
        this.bcc = bcc;
    }
    
    public static void main(String[] args) throws Exception{
        BaseMailService bms=new BaseMailService();
        
        // 邮件服务器,用户,收发人设置
        bms.setSmtpServer("Ds23M0ds016.cn.ufo.com");
        bms.setSmtpUsername("user");
        bms.setSmtpPassword("password");
        bms.setFrom("adm@us.ufo.com");
        bms.setTo("receiver@cn.ufo.com");
        
        // 邮件标题
        String title ="Hello";
        
        // 邮件正文
        StringBuilder sb = new StringBuilder();
        sb.append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">");
        sb.append("<html>");
        sb.append(" <head>");
        sb.append("  <title> " + title + " </title>");
        sb.append(" </head>");
        sb.append("");
        sb.append(" <body>");
        sb.append("  <h4>Hi:</h4>");
        sb.append("  <p>How are you!. </p>");
        sb.append("  <p>你好</p>");
        sb.append(" </body>");
        sb.append("</html>");
        String content = sb.toString();
        
        String[] files={"c:\\1.xml","c:\\2.xml"};
        
        bms.sendMail(title, content, files);
    }
}

// 辅助类ByteArrayDataSource

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.OutputStream;

import javax.activation.DataSource;

public class ByteArrayDataSource implements DataSource {

    private final String contentType;
    private final byte[] buf;
    private final int len;

    public ByteArrayDataSource(byte[] buf, String contentType) {
        this(buf, buf.length, contentType);
    }

    public ByteArrayDataSource(byte[] buf, int length, String contentType) {
        this.buf = buf;
        this.len = length;
        this.contentType = contentType;
    }

    public String getContentType() {
        if (contentType == null)
            return "application/octet-stream";
        return contentType;
    }

    public InputStream getInputStream() {
        return new ByteArrayInputStream(buf, 0, len);
    }

    public String getName() {
        return null;
    }

    public OutputStream getOutputStream() {
        throw new UnsupportedOperationException();
    }
}

// 辅助类SmtpAuthenticator
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
 * Smtp认证
 */
public class SmtpAuthenticator extends Authenticator {
    String username = null;
    String password = null;

    // SMTP身份验证
    public SmtpAuthenticator(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(this.username, this.password);
    }

}

 

posted @ 2014-12-25 11:03  逆火狂飙  阅读(222)  评论(1编辑  收藏  举报
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东