/**
* 发送邮件
* @param sysinfoMailConfig 邮件发送配置类
* @param condition
* @return
* @throws Exception
*/
public Map<String,String> sendMailInfo(SysinfoMailConfig sysinfoMailConfig, Map<String, String> condition) {
Transport trans = null;
Map<String,String> map=new HashMap<String,String>();
map.put("state", "success");
String message="邮件发送成功!";
//接收人
String to=condition.get("to");
//抄送人
String cc=condition.get("cc");
try {
Session session=null;
Properties props = System.getProperties();
props.put("mail.smtp.host", sysinfoMailConfig.getHost());//邮件服务器地址,如qq邮件为smtp.qq.com
if("1".equals(sysinfoMailConfig.getIsauth())){ //服务器需要身份认证,可根据实际情况自行设置
props.put("mail.smtp.auth","true");
//sysinfoMailConfig.getUsername()为发件人邮箱用户名,sysinfoMailConfig.getPassword()为发件人邮箱密码
SmtpAuth smtpAuth=new SmtpAuth(sysinfoMailConfig.getUsername(),sysinfoMailConfig.getPassword());
session=Session.getDefaultInstance(props, smtpAuth);
}else{
props.put("mail.smtp.auth","false");
session=Session.getDefaultInstance(props, null);
}
Message msg = new MimeMessage(session);
//设置发件人邮箱及昵称
Address from_address = new InternetAddress(sysinfoMailConfig.getSendadress(),sysinfoMailConfig.getDisplayname());
msg.setFrom(from_address);
//设置邮件接收人
if(StringUtil.isNotBlank(to)){
msg.setRecipients(Message.RecipientType.TO, getInternetAddress(to));
}
//设置邮件抄送人
if(StringUtil.isNotBlank(cc)){
msg.setRecipients(Message.RecipientType.CC, getInternetAddress(cc));
}
msg.setSubject(condition.get("subject"));
Multipart mp = new MimeMultipart();
MimeBodyPart mbp_content = new MimeBodyPart();
//condition.get("mailcontent")为邮件正文内容,为text/html格式
mbp_content.setContent(condition.get("mailcontent"), "text/html;charset=UTF-8");
mp.addBodyPart(mbp_content);
msg.setContent(mp); //Multipart加入到信件
msg.setSentDate(new Date()); //设置信件头的发送日期
//发送信件
msg.saveChanges();
trans = session.getTransport("smtp");
trans.connect(sysinfoMailConfig.getHost(), sysinfoMailConfig.getUsername(), sysinfoMailConfig.getPassword());
trans.sendMessage(msg, msg.getAllRecipients());
}catch(AuthenticationFailedException e){
map.put("state", "failed");
message="邮件发送失败!错误原因:身份验证错误!";
log.error("--------------------"+condition.get("subject")+to+message+e+"--------------------");
}catch (MessagingException e) {
message="邮件发送失败!错误原因:"+e.getMessage();
map.put("state", "failed");
log.error("--------------------"+condition.get("subject")+to+message+e+"--------------------");
Exception ex = null;
if ((ex = e.getNextException()) != null) {
log.error("--------------------"+condition.get("subject")+to+"邮件发送失败!错误原因:"+ex+"--------------------");
}
} catch (Exception e){
message = "邮件发送失败!错误原因:"+e.getMessage();
map.put("state", "failed");
log.error("--------------------"+condition.get("subject")+to+message+e+"--------------------");
}finally{
if(trans!=null){
try {
trans.close();
} catch (MessagingException e) {
log.error("--------------------"+condition.get("subject")+to+e+"--------------------");
}
}
}
map.put("message", message);
return map;
}
/**
* 处理收件人邮箱及抄送人邮箱
* @param mailAdress 多个以;分隔
* @return
* @throws Exception
*/
public InternetAddress[] getInternetAddress(String mailAdress) throws Exception {
if (mailAdress.length() == 0) {
return null;
}
String []mailAdressArr=mailAdress.split(";");
InternetAddress[] internetAddresses = new InternetAddress[mailAdressArr.length];
for (int i = 0; i < mailAdressArr.length; i++) {
internetAddresses[i]=new InternetAddress(mailAdressArr[i]);
}
return internetAddresses;
}
//内部类:服务器验证类
public class SmtpAuth extends Authenticator {
private String username,password;
public SmtpAuth(String username,String password){
this.username = username;
this.password = password;
}
protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
return new javax.mail.PasswordAuthentication(username,password);
}
}
例如qq邮箱设置:
发送邮件时注意事项,对于有些邮箱可能会有拦截机制,注意不要频繁发送