package com.chinahrt.zyn;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
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 MailUtil {
private MimeMessage mimeMsg; // MIME邮件对象
private Session session; // 邮件会话对象
private Properties props; // 系统属性
private boolean needAuth = false; // smtp是否需要认证
private String username = ""; // smtp认证用户名和密码
private String password = "";
private Multipart mp; // Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成//MimeMessage对象
public MailUtil(String smtp){
setSmtpHost(smtp);
createMimeMessage();
}
public void setSmtpHost(String hostName){
if(props == null){
props = System.getProperties();
props.put("mail.smtp.host", hostName);
}
}
public boolean createMimeMessage(){
try{
System.out.println("准备获取邮件回话对象");
session = Session.getDefaultInstance(props,null);
}catch(Exception e){
e.printStackTrace();
return false;
}
System.out.println("准备常见mime邮件对象");
try{
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart();
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
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){
System.out.println("程序得到用户名与密码");
username = name;
password = pass;
}
public boolean setSubject(String mailSubject){
System.out.println("设置邮件主题");
try{
mimeMsg.setSubject(mailSubject);
return true;
}catch(Exception e){
System.out.println("设置邮件主题发生错误!");
return false;
}
}
public boolean setBody(String mailBody){
try{
System.out.println("设置邮件格式");
BodyPart bp = new MimeBodyPart();
bp.setContent("<meta http-equiv=Content-Type content=text/html;charset=gb2312>"+
mailBody,"text/html;charset=GB2312");
mp.addBodyPart(bp);
return true;
}catch(Exception e){
System.out.println("设置邮件格式错误");
e.printStackTrace();
return false;
}
}
public boolean addFileAffix(String filename){
System.out.println("增加邮件附件:"+filename);
try{
BodyPart bp = new MimeBodyPart();
FileDataSource fields = new FileDataSource(filename);
bp.setDataHandler(new DataHandler(fields));
bp.setFileName(fields.getName());
mp.addBodyPart(bp);
return true;
}catch(Exception e){
System.out.println("增加邮件附件:"+filename+"发生错误!");
e.printStackTrace();
return false;
}
}
public boolean setFrom(String from){
System.out.println("设置发信人");
try{
mimeMsg.setFrom(new InternetAddress(from));
return true;
}catch(Exception e){
return false;
}
}
public boolean setTo(String to){
System.out.println("设置收信人");
if(to == null){
return false;
}
try{
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
public boolean setCopyTo(String copyto){
System.out.println("发邮件到"+copyto);
if(copyto == null){
return false;
}
try{
mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copyto));
return true;
}catch(Exception e){
e.printStackTrace();
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.getRecipients(Message.RecipientType.TO));
//加了才可以发到抄送人
transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.CC));
//加了才可以发到密送人
transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.BCC));
System.out.println("邮件发送成功");
transport.close();
return true;
}catch(Exception e){
System.out.println("邮件发送失败");
e.printStackTrace();
return false;
}
}
public static void main(String[] args){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String mailbody = "邮件注册测试 "+sdf.format(new Date());
MailUtil themail = new MailUtil("smtp.163.com");
themail.setNeedAuth(true);
if (themail.setSubject("chinahrt邮件测试") == false)
return;
//邮件内容 支持html 如 <font color=red>欢迎光临</font> <a href=\"http://www.laabc.com\">啦ABC</a>
if (themail.setBody(mailbody) == false)
return;
//收件人邮箱
if (themail.setCopyTo("1111111@qq.com,") == false)
return;
if (themail.setTo("111111@sina.com") == false)
return;
//发件人邮箱
if (themail.setFrom("zhangyanan@chinanet.gov.cn") == false)
return;
//设置附件
//if (themail.addFileAffix("#######") == false) //return; // 附件在本地机子上的绝对路径
themail.setNamePass("444444444@chinanet.gov.cn", "123456"); // 用户名与密码
if (themail.sendout() == false)
return;
}
}