java发送邮件工具类


import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
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.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;
import javax.mail.internet.MimeUtility;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;


public class SendMailUtil {
private Logger logger = LoggerFactory.getLogger(this.getClass());

private MimeMessage message;
private Session session;
private Transport transport;


private String mailHost;
private String senderUsername;
private String senderPassword;
private String senderNickName;


private Properties properties = new Properties();


/*
* 初始化方法
*/
public SendMailUtil(String mailHost, String senderUsername, String senderPassword, String senderNickName) {
try {
this.mailHost = mailHost;
this.senderUsername = senderUsername;
this.senderPassword = senderPassword;
this.senderNickName = senderNickName;
session = Session.getInstance(properties);
session.setDebug(false);// 开启后有调试信息
message = new MimeMessage(session);
} catch (Exception e) {
logger.error("SendMailUtil初始化失败",e);
}
}


/**
* 发送邮件
* @param subject 邮件主题
* @param sendHtml 邮件内容
* @param addresses 收件人邮箱
* @param attachment 附件
*/
public void doSendHtmlEmail(String subject, String sendHtml,
Map<String, String> addressesMap, Map<String, String> copyAddressesMap, File attachment) {
if (CollectionUtils.isEmpty(addressesMap)) {
return;
}
try {
// 发件人
InternetAddress from = null;
if (StringUtils.isBlank(senderNickName)) {
from = new InternetAddress(senderUsername);
} else {
from = new InternetAddress(senderUsername, senderNickName);
}
message.setFrom(from);


// 收件人
List<InternetAddress> listAddresses = new ArrayList<InternetAddress>();
for (Map.Entry<String, String> entry : addressesMap.entrySet()) {
InternetAddress to = new InternetAddress(entry.getKey(), entry.getValue());
listAddresses.add(to);
}
InternetAddress[] addressesArray = listAddresses.toArray(new InternetAddress[listAddresses.size()]);
message.setRecipients(Message.RecipientType.TO, addressesArray);

if (!CollectionUtils.isEmpty(copyAddressesMap)) {
// 抄送人
List<InternetAddress> listCopyAddresses = new ArrayList<InternetAddress>();
for (Map.Entry<String, String> entry : copyAddressesMap.entrySet()) {
InternetAddress copyTo = new InternetAddress(entry.getKey(), entry.getValue());
listCopyAddresses.add(copyTo);
}
InternetAddress[] copyAddressesArray = listCopyAddresses.toArray(new InternetAddress[listCopyAddresses.size()]);
message.setRecipients(Message.RecipientType.CC, copyAddressesArray);
}


// 邮件主题
message.setSubject(subject);


// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart();


// 添加邮件正文
BodyPart contentPart = new MimeBodyPart();
contentPart.setContent(sendHtml, "text/html;charset=UTF-8");
multipart.addBodyPart(contentPart);


// 添加附件的内容
if (attachment != null) {
BodyPart attachmentBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(attachment);
attachmentBodyPart.setDataHandler(new DataHandler(source));


// MimeUtility.encodeWord可以避免文件名乱码
attachmentBodyPart.setFileName(MimeUtility
.encodeWord(attachment.getName()));
multipart.addBodyPart(attachmentBodyPart);
}


// 将multipart对象放到message中
message.setContent(multipart);
// 保存邮件
message.saveChanges();


transport = session.getTransport("smtp");
// smtp验证,就是你用来发邮件的邮箱用户名密码
transport.connect(mailHost, senderUsername, senderPassword);
// 发送
transport.sendMessage(message, message.getAllRecipients());
logger.debug("send success!");
} catch (Exception e) {
logger.debug("send failed!");
} finally {
if (transport != null) {
try {
transport.close();
} catch (MessagingException e) {

}
}
}
}



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值