Java mail 实现邮件附件的发送

来源:互联网 发布:手机上的编程软件 编辑:程序博客网 时间:2024/06/05 18:36

原文:http://www.codefans.net/articles/209.shtml


package mail;

import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Message;
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;
import javax.transaction.Transaction;


import com.sun.jndi.cosnaming.IiopUrl.Address;
import com.sun.mail.util.MimeUtil;


public class MyMail {
private MimeMessage mimeMsg;  //定义使用MIME类型、MIME信息头的邮箱信息
private Session session;    //会话
private Properties props;  //属性
private String username;   //用户名
private String password;   //密码
private Multipart mp;

public MyMail(String smtphost){
setSmtpHost(smtphost);  //设置邮件服务器
createMimeMessage();
}

public void setSmtpHost(String hostName){
System.err.println("设置系统属性: mail.smtp.host="+hostName);
if(props == null){
props = System.getProperties();
}
props.put("mail.smtp.host", hostName);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.checkserveridentity", "false"); 
props.put("mail.smtp.ssl.trust", "mail.myhexin.com");
}

public boolean createMimeMessage(){
try {
System.out.println("准备获取邮件回话对象!");
session = Session.getDefaultInstance(props, null);
} catch (Exception e) {
// TODO: handle exception
System.err.println("获取邮件会话错误!"+e);
return false;
}
System.out.println("准备创建MIME邮件对象!");
try {
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart();
return true;
} catch (Exception e) {
// TODO: handle exception
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");
}
}

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) {
// TODO: handle exception
System.err.println("定义邮件主题发生错误!");
return false;
}
}

/**
* 定义邮件正文
* @param mailBody
* @return
*/
public boolean setBody(String mailBody){
try {
BodyPart bp = new MimeBodyPart();
bp.setContent(""+mailBody, "text/html;charset=UTF-8");
mp.addBodyPart(bp); //添加邮件正文
return true;
} catch (Exception e) {
// TODO: handle exception
System.err.println("定义邮件正文时发生错误!"+e);
return false;
}
}

/**
* 定义附件发送
* @param path
* @return
*/
public boolean setAnnex(String path){
try {
MimeBodyPart mimeBodyPart = new MimeBodyPart();  
DataSource source = new FileDataSource(path);   //获取附件
mimeBodyPart.setDataHandler(new DataHandler(source));  //添加附加的内容
mimeBodyPart.setFileName(MimeUtility.encodeWord(source.getName()));  //设置解决附件名的中文乱码问题
mp.addBodyPart(mimeBodyPart);   //添加附件
return true;
} catch (Exception e) {
// TODO: handle exception
System.err.println("定义附件时发生错误!"+e);
return false;
}
}

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

/**
* 定义收信人
* @param to
* @return
*/
public  boolean setTo(String to){
if(to == null){
return false;
}
System.out.println("定义收信人!");
try {
mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));  //收信人
return true;
} catch (Exception e) {
// TODO: handle exception
return false;
}
}

/**
* 定义抄送人
* @param copyto
* @return
*/
public boolean setCopyTo(String copyto){
if(copyto == null)
return false;
try {
mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copyto));
return true;
} catch (Exception e) {
// TODO: handle exception
return false;
}
}

/**
* 邮件发送模块
* @return
*/
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.getProperty("mail.smtp.host"), username,password);
transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
System.out.println("发送成功!");
transport.close();
return true;
} catch (Exception e) {
// TODO: handle exception
System.err.println("邮件发送失败!"+e);
return false;
}
}
/**
* 调用sendOut方法完成发送
* @param smtp
* @param from
* @param to
* @param copyto
* @param subject
* @param content
* @param path
* @param username
* @param password
* @return
*/
public static boolean sendAndCc(String smtp,String from,String to,String copyto,
String subject,String content,String path,String username,String password){
   MyMail theMail = new MyMail(smtp);
   theMail.setNeedAuth(true); //验证
   if(!theMail.setSubject(subject))
    return false;
   if (!theMail.setBody(content))
               return false;
   if(!theMail.setAnnex(path))
    return false;
   if (!theMail.setTo(to))
               return false;
   if (!theMail.setCopyTo(copyto))
    return false;
    if (!theMail.setFrom(from))
               return false;
     theMail.setNamePass(username, password);
    if (!theMail.sendOut())
               return false;
           return true;


}

}

//下面是测试类

package mail;

public class testSendMail {
public static void main(String[] args) {
String smtp = "mail.qq.com";// smtp服务器
String from = "123@qq.com";// 邮件显示名称
    String to = "1232@qq.com";// 收件人的邮件地址,必须是真实地址
String copyto = "875020801@qq.com";// 抄送人邮件地址
String subject = "测试邮件";// 邮件标题
String content = "你好! 小苍";// 邮件内容
String path = "E:\\测试.txt";    //本地要发送的附件路径
String username = "123134@qq.com";// 发件人真实的账户名
String password = "1232132";// 发件人邮箱密码
MyMail.sendAndCc(smtp, from, to, copyto, subject, content, path,username, password);  //调用发送函数
 
}
}

1 0
原创粉丝点击