javax mail发邮件
Posted 十一路客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javax mail发邮件相关的知识,希望对你有一定的参考价值。
1. mail配置
## mail
mail.smtp.host=smtp.XXXXXX.com
mail.smtp.user=username@XXXXXX.com
mail.smtp.password=111111
mail.smtp.port=465
mail.smtp.auth=true
mail.smtp.timeout=25000
mail.smtp.ssl.enable=true
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
mail.smtp.socketFactory.port=465
mail.smtp.socketFactory.fallback=false
mail.recipient.cc=ccusername@XXXXXX.com
2.MailUtil.java
@Component
public class MailUtil implements InitializingBean
@Autowired
private AppConfig appConfig;
private static final String SMTP = "smtp";
private static final String CONTENT_TYPE = "text/html;charset=utf-8";
private static final List<String> CC = new ArrayList<String>();
private static final Logger logger = Logger.getLogger(MailUtil.class);
public void sendMail(List<String> toList, List<String> cc, String subject, String body)
throws AddressException, MessagingException
Properties props = System.getProperties();
props.put("mail.smtp.ssl.enable", appConfig.getMailSsl());
props.put("mail.smtp.host", appConfig.getMailHost());
props.put("mail.smtp.user", appConfig.getMailUser());
props.put("mail.smtp.password", appConfig.getMailPassword());
props.put("mail.smtp.port", appConfig.getMailPort());
props.put("mail.smtp.auth", appConfig.getMailAuth());
Session session = Session.getDefaultInstance(props);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(appConfig.getMailUser()));
logger.info("mail subject : " + subject);
List<String> to = new ArrayList<String>();
for (int i = 0; i < toList.size(); i++) //去重
String tempMail = toList.get(i);
logger.info("toList mail i = " + i + " : " + tempMail);
if(!to.contains(tempMail))
to.add(tempMail);
logger.info("after removing the repeat mail, to list size: " + to.size());
//20160202 in product 暂时注释掉 将收件人替换为开发者自己 正式环境下去掉注释
for (int i = 0; i < to.size(); i++)
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to.get(i)));
if (cc != null)
for (int i = 0; i < cc.size(); i++)
message.addRecipient(Message.RecipientType.CC, new InternetAddress(cc.get(i)));
//没什么用 注释掉
/*for (int i = 0; i < CC.size(); i++)
message.addRecipient(Message.RecipientType.CC, new InternetAddress(CC.get(i)));
*/
//20160202 in develop 暂时加上将收件人替换为开发者自己 正式环境下注释掉
//message.addRecipient(Message.RecipientType.TO, new InternetAddress("testusername@XXXXXX.com"));
//message.addRecipient(Message.RecipientType.TO, new InternetAddress(Constants.ADMIN_EMAIL));
message.setSubject(subject);
message.setContent(body, CONTENT_TYPE);
Transport transport = session.getTransport(SMTP);
transport.connect(appConfig.getMailHost(), appConfig.getMailUser(), appConfig.getMailPassword());
transport.sendMessage(message, message.getAllRecipients());
transport.close();
@Override
public void afterPropertiesSet() throws Exception
// TODO Auto-generated method stub
if (!Strings.isNullOrEmpty(appConfig.getMailCc()))
String []cc = appConfig.getMailCc().split(";");
for (int i = 0; i < cc.length; i++)
CC.add(cc[i].trim());
3.AppConfig.java(将properties中的属性映射到bean中)
@Component
public class AppConfig
public static final String CURRENT_WORKING_DIR = System
.getProperty("user.dir");
public static final String FILE_SEPARATOR = System
.getProperty("file.separator");
static final String DEV_MODE = "dev";
static final String PROD_MODE = "prod";
// app ---------------------------------------------------------------------
@Value("$app.runMode")
private String runMode;
@Value("$app.workDir")
private String workDirPath;
// http --------------------------------------------------------------------
@Value("$app.server.port")
private int httpPort;
@Value("$app.server.sessionTimeout")
private int httpSessionTimeout;
// mail
@Value("$mail.smtp.host")
private String mailHost;
@Value("$mail.smtp.user")
private String mailUser;
@Value("$mail.smtp.password")
private String mailPassword;
@Value("$mail.smtp.port")
private String mailPort;
@Value("$mail.smtp.auth")
private String mailAuth;
@Value("$mail.smtp.timeout")
private String mailTimeout;
@Value("$mail.smtp.ssl.enable")
private String mailSsl;
@Value("$mail.recipient.cc")
private String mailCc;
public String getMailHost()
return mailHost;
public void setMailHost(String mailHost)
this.mailHost = mailHost;
public String getMailUser()
return mailUser;
public void setMailUser(String mailUser)
this.mailUser = mailUser;
public String getMailPassword()
return mailPassword;
public void setMailPassword(String mailPassword)
this.mailPassword = mailPassword;
public String getMailPort()
return mailPort;
public void setMailPort(String mailPort)
this.mailPort = mailPort;
public String getMailAuth()
return mailAuth;
public void setMailAuth(String mailAuth)
this.mailAuth = mailAuth;
public String getMailTimeout()
return mailTimeout;
public void setMailTimeout(String mailTimeout)
this.mailTimeout = mailTimeout;
public String getMailSsl()
return mailSsl;
public void setMailSsl(String mailSsl)
this.mailSsl = mailSsl;
public String getMailCc()
return mailCc;
public void setMailCc(String mailCc)
this.mailCc = mailCc;
//判断是在开发模式还是生产模式
public boolean isInDevelopMode()
if (runMode.compareTo(DEV_MODE) == 0)
return true;
return false;
public boolean isInProductionMode()
if (runMode.compareTo(PROD_MODE) == 0)
return true;
return false;
public String getRunMode()
return runMode;
public String getWorkDirPath()
return workDirPath;
public int getHttpPort()
return httpPort;
public int getHttpSessionTimeout()
return httpSessionTimeout;
以上是关于javax mail发邮件的主要内容,如果未能解决你的问题,请参考以下文章
关于oozie在发邮件的报错Caused by: javax.mail.AuthenticationFailedException
javamail发邮件始终报javax.mail.NoSuchProviderException:smtp错误