`

java mail

阅读更多
实例

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
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 SendEmail {
//日志
private static Logger  logger = Logger.getLogger(SendEmail.class);

//使用组合的方式,将用到的类私有化成成员变量
private MimeMessage mimeMsg; // MIME邮件对象
private Session session; // 邮件会话对象,该对象的目的是为了通过Properties获取发送邮件的地址,然后创建MimeMessage对象
private Properties props; // 系统属性,目的是向里面存放mail.smtp.host值,
private String username; // smtp认证用户名和密码
private String password;
private Multipart mp;//附件相关的

//私有化构造函数
private SendEmail(){}
//指定构造函数必须依靠SendEmail成员变量值
private SendEmail(TYPE field){
//初始化props,session,mimeMsg
initProps(field);
initSession();
initMimeMsg();
}

//初始化props
private boolean initProps(TYPE field){
props = System.getProperties();
props.setProperty("mail.smtp.host", field.getValue());//设置服务器host
props.setProperty("mail.smtp.connectiontimeout","10000");
return true;
}

//初始化session
private boolean initSession(){
session = Session.getDefaultInstance(props);
return true;
}

//初始化mimeMsg
private boolean initMimeMsg(){
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart();
return true;
}

//设置主题
public boolean setMailTheme(String mailTheme){
try {
mimeMsg.setSubject(mailTheme);
} catch (MessagingException e) {
logger.info("添加邮件主题失败");
return false;
}
return true;
}

//设置内容
public boolean setMailBody(String mailBody){
BodyPart bp = new MimeBodyPart();//被包含到MimeMultipart对象中
try{
bp.setContent(mailBody,"text/html;charset=GB2312");//bodyPart用于封装正文内容
mp.addBodyPart(bp);//mp是添加正文类和附件类的
}catch(Exception e){
logger.info("添加邮件正文出现异常",e);
return false;
}
return true;
}

//添加附件
public boolean setAffix(String affixFileName){
BodyPart bp = new MimeBodyPart();//BodyPart是用于封装邮件正文和附件的类,最后需要添加到Multipart类中
//添加附件需要使用DataHandler
try {
FileDataSource fileDataSource = new FileDataSource(affixFileName);
bp.setDataHandler(new DataHandler(fileDataSource));
mp.addBodyPart(bp);
} catch (MessagingException e) {
logger.info("添加附件失败",e);
return false;
}
return true;
}

//添加写信人
public boolean setFrom(String user){
try {
mimeMsg.setFrom(new InternetAddress(user));
} catch (Exception  e){
logger.info("添加发信人失败",e);
return false;
}
return true;
}

/**
* 添加接收人
* @desc receivers 多个接收者要以,号分隔
*/
public boolean setReceivers(String receivers){
try {
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress
.parse(receivers));
} catch (Exception e) {
logger.info("添加接受人失败",e);
return false;
}
return true;
}

/**
* 添加抄送人
* @param copyers 多个抄送人要以逗号分隔
* @return 是否添加成功
*/
public boolean setCarBonCopy(String copyers){
try {
mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress
.parse(copyers));
} catch (Exception e) {
logger.info("添加抄送人出现异常",e);
return false;
}
return true;
}
/**
* 是否需要验证
* @param need
*/
public void setNeedAuth(final boolean need) {
if (need) {
props.put("mail.smtp.auth", "true");
} else {
props.put("mail.smtp.auth", "false");
}
}

/**
* 发出
* @return 是否发送成功
*/
public boolean sendOut(String userName,String password){
try {
mimeMsg.setContent(mp);//添加附件和正文
mimeMsg.saveChanges();//更新邮件的同步信息以和内容保持同步
Session session = Session.getDefaultInstance(props,null);
Transport  transport = session.getTransport("smtp");
//参数1服务器的类型值,参数2用户名,参数3密码
transport.connect(props.getProperty("mail.smtp.host"),userName,password);
//添加邮件类以及地址发出邮件
transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));
transport.close();
} catch (Exception e) {
logger.info("邮件发送失败",e);
return false;
}
return true;
}

/**
* 用户调用的发送邮件方法
* @param mailTheme 邮件主题
* @param mailBody 邮件内容
* @param mulitpart 附件
* @param users 发送人
* @param recevers 接收人,多个接收人要以逗号分隔
* @param copyers 抄送人,多个接收人要以逗号分隔
* @return 是否发送成功
* @desc 因为只有在服务器挂了等特殊情况下才需要,所以每次在静态方法中
*/
public static boolean sendEmail(String mailTheme,String mailBody,String affixFileName,String users,String recevers,String copyers,String userName,String password){
boolean flag = false;
SendEmail email = new SendEmail(TYPE.SMTP_TNICE);
email.setNeedAuth(false);
email.setMailTheme(mailTheme);//添加标题
email.setMailBody(mailBody);//添加内容
email.setAffix(affixFileName);
email.setFrom(users);
email.setReceivers(recevers);
email.setCarBonCopy(copyers);
flag = email.sendOut(userName, password);
if(flag){
logger.info("邮件发送成功");
return true;
}else{
logger.info("邮件发送失败");
return false;
}
}

public void setMimeMsg(MimeMessage mimeMsg) {
this.mimeMsg = mimeMsg;
}

public void setSession(Session session) {
this.session = session;
}

public void setProps(Properties props) {
this.props = props;
}

public void setUsername(String username) {
this.username = username;
}

public void setPassword(String password) {
this.password = password;
}

public void setMp(Multipart mp) {
this.mp = mp;
}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics