Java邮件发送

JAVA学习网 2019-04-04 00:36:02

package com...util;

import java.util.Properties;
import javax.activation.DataHandler;
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;
import javax.mail.internet.MimeUtility;
/**
*邮件发送帮助类
**/
public class MailUtil {
private MimeMessage mimeMsg; // MIME邮件对象
private Session session; // 邮件会话对象
private Properties props; // 系统属性
private boolean needAuth = false; // smtp是否需要认证
// smtp认证用户名和密码
private String username;
private String password;
private Multipart mp; // Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象

/**
 * Constructor
 * 
 * @param smtp
 *            邮件发送服务器
 */
public MailUtil(String smtp){ 
    setSmtpHost(smtp); 
    createMimeMessage(); 
} 

/**
 * 设置邮件发送服务器
 * 
 * @param hostName
 *            String
 */
public  void setSmtpHost(String hostName) { 
    // System.out.println("设置系统属性:mail.smtp.host = "+hostName);
    if(props == null)
        props = System.getProperties(); // 获得系统属性对象
    props.setProperty("mail.smtp.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory");

    props.setProperty("mail.smtp.socketFactory.fallback", "false");

    props.put("mail.smtp.host", hostName); // 设置SMTP主机
    props.setProperty("mail.smtp.port", "465");//qq设置465///25

} 


/**
 * 创建MIME邮件对象
 * 
 * @return
 */
public boolean createMimeMessage() 
{ 
    try { 
        // System.out.println("准备获取邮件会话对象!");
        session = Session.getDefaultInstance(props, null); // 获得邮件会话对象
        session.setDebug(true);
    } 
    catch(Exception e){ 
        System.err.println("获取邮件会话对象时发生错误!" + e);
        return false; 
    } 

    // System.out.println("准备创建MIME邮件对象!");
    try { 
        mimeMsg = new MimeMessage(session); // 创建MIME邮件对象
        mp = new MimeMultipart(); 
    
        return true; 
    } catch(Exception e){ 
        System.err.println("创建MIME邮件对象失败!" + e);
        return false; 
    } 
}   

/**
 * 设置SMTP是否需要验证
 * 
 * @param need
 */
public void setNeedAuth(boolean need) { 
    // System.out.println("设置smtp身份认证:mail.smtp.auth = "+need);
    if(props == null) props = System.getProperties(); 
    if(need){ 
        props.put("mail.smtp.auth","true"); 
    }else{ 
        props.put("mail.smtp.auth","false"); 
    } 
} 

/**
 * 设置用户名和密码
 * 
 * @param name
 * @param pass
 */
public void setNamePass(String name,String pass) { 
    username = name; 
    password = pass; 
} 

/**
 * 设置邮件主题
 * 
 * @param mailSubject
 * @return
 */
public boolean setSubject(String mailSubject) { 
    // System.out.println("设置邮件主题!");
    try{ 
        mimeMsg.setSubject(mailSubject); 
        return true; 
    } 
    catch(Exception e) { 
        System.err.println("设置邮件主题发生错误!");
        return false; 
    } 
}

/**
 * 设置邮件正文
 * 
 * @param mailBody
 *            String
 */ 
public boolean setBody(String mailBody) { 
    try{ 
        BodyPart bp = new MimeBodyPart(); 
        bp.setContent(""+mailBody,"text/html;charset=GBK"); 
        mp.addBodyPart(bp); 
        return true; 
    } catch(Exception e){ 
        System.err.println("设置邮件正文时发生错误!" + e);
    return false; 
    } 
} 

/**
 * 添加附件
 * 
 * @param filename
 *            String
 */ 
public boolean addFileAffix(String filename) { 

    // System.out.println("增加邮件附件:"+filename);
    try{ 
        BodyPart bp = new MimeBodyPart(); 
        FileDataSource fileds = new FileDataSource(filename); 
        bp.setDataHandler(new DataHandler(fileds)); 
        bp.setFileName(MimeUtility.encodeText(fileds.getName()));       
        mp.addBodyPart(bp); 
        return true; 
    } catch(Exception e){ 
        System.err.println("增加邮件附件:" + filename + "发生错误!" + e);
        return false; 
    } 
} 

/**
 * 设置发信人
 * 
 * @param from
 *            String
 */ 
public boolean setFrom(String from) { 
    // System.out.println("设置发信人!");
    try{ 
        
        mimeMsg.setFrom(new InternetAddress(from)); // 设置发信人
        
        return true; 
    } catch(Exception e) { 
        return false; 
    } 
} 

/**
 * 设置收信人
 * 
 *  设置属性
 *  private Properties p; // p是属性集合类,用来设置邮件的一些属性比如timeout等
 *  p.put("userName","xxx@163.com"); //这里填上你的邮箱(发送方)
 *  构件MimeMessage 对象,并设置在发送给收信人之前给自己(发送方)抄送一份
 *  MimeMessage msg = mailSender.createMimeMessage();
 *  msg.addRecipients(MimeMessage.RecipientType.CC, InternetAddress.parse(p.getProperty("userName")));
 *
 * @param to
 *            String
 */ 
public boolean setTo(String[] to,String from){ 
    if(to == null)return false; 
    
    try{ 
        mimeMsg.addRecipients(Message.RecipientType.CC,InternetAddress.parse(from));//给自己抄送一份
        
        int mailSize = to.length;
        for(int i = 0; i < mailSize; i++){
            InternetAddress toStr = new  InternetAddress(to[i]);
            mimeMsg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(toStr.toString()));
        }
        
        return true; 
    } catch(Exception e) { 
        return false; 
    }   
} 

/**
 * 发送邮件
 */ 
public boolean sendOut() 
{ 
    try{ 
        mimeMsg.setContent(mp); 
        mimeMsg.saveChanges(); 
        // System.out.println("正在发送邮件....");
        
        Session mailSession = Session.getInstance(props,null); 
        Transport transport = mailSession.getTransport("smtp"); 
        transport.connect((String)props.get("mail.smtp.host"),username,password); 
        //transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
        transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.CC));
        transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));
         System.out.println("发送邮件成功!");
        transport.close();          
        return true; 
    } catch(Exception e) { 
        System.err.println("邮件发送失败!" + e);
        return false; 
    } 
} 

/**
 * 调用sendOut方法完成邮件发送
 * 
 * @param smtp
 * @param from
 * @param to
 * @param subject
 * @param content
 * @param username
 * @param password
 * @return boolean
 */
public static boolean send(String smtp,String from,String[] to,String subject,String content,String username,String password) {
    MailUtil theMail = new MailUtil(smtp);
    theMail.setNeedAuth(true); // 需要验证
    
    if(!theMail.setSubject(subject)) return false;
    if(!theMail.setBody(content)) return false;
    if(!theMail.setTo(to,from)) return false;
    if(!theMail.setFrom(from)) return false;
    theMail.setNamePass(username,password);
    
    if(!theMail.sendOut()) return false;
    return true;
}

/**
 * 调用sendOut方法完成邮件发送,带附件
 * 
 * @param smtp
 * @param from
 * @param to
 * @param subject
 * @param content
 * @param username
 * @param password
 * @param filename
 *            附件路径
 * @return
 */
public static boolean send(String smtp,String from,String[] to,String subject,String content,String username,String password,String filename) {
    MailUtil theMail = new MailUtil(smtp);
    theMail.setNeedAuth(true); // 需要验证
    
    if(!theMail.setSubject(subject)) return false;
    if(!theMail.setBody(content)) return false;
    if(!theMail.addFileAffix(filename)) return false; 
    if(!theMail.setTo(to,from)) return false;
    if(!theMail.setFrom(from)) return false;
    theMail.setNamePass(username,password);
    if(!theMail.sendOut()) return false;
    return true;
}

}
测试类
// Mail.host=smtp.163.com
// Mail.from=*****@163.com
// Mail.username=****@163.com//邮箱地址
// Mail.password=****//邮箱密码
public class MailTest {
public static void main(String[] args) {
String host = "smtp.aliyun.com";
String from = "****@aliyun.com";
String[] toUser = new String[]{"******@qq.com"};
String subject = "测试邮件发送";
String username = "****";
String password = "****";
String content = "测试发送内容";
boolean falg = MailUtil.send(host, from, toUser, subject, content,username, password);
System.out.println(falg);
}

}

阅读(2669) 评论(0)