一 导入jar
导入spring-context-support-4.0.5.RELEASE.jar相关jar
二 配置spring配置文件
这里可以灵活配置发件邮箱服务器、发件邮箱端口、发件用户名、密码
如果系统发件服务器信息定死在properties中可以在spring.xml中直接配置
本文采用系统中动态配置发件信息服务器
<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="defaultEncoding" value="utf-8" />
<!--
<property name="host" value="${mail.host}" />
<property name="port" value="${mail.port}" />
<property name="username" value="${mail.fromAddress}" />
<property name="password" value="${mail.fromAddressPassword}" />
-->
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<!-- <prop key="mail.smtp.timeout">25000</prop> -->
<!-- <prop key="mail.smtp.starttls.enable">true</prop> -->
<prop key="mail.smtp.ssl.enable">true</prop>
<prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
</props>
</property>
</bean>
三 java代码实现
采用freemarker 构建邮件的模板
采用spring线程池实现异步发送
@Autowired
private FreeMarkerConfigurer freemarkerConfig;
@Autowired
private JavaMailSenderImpl javaMailSender;
@Autowired
private TaskExecutor taskExecutor;
/**
* 发送邮件
*
* @param smtpFromMail
* 发件人邮箱
* @param smtpHost
* SMTP服务器地址
* @param smtpPort
* SMTP服务器端口
* @param smtpUsername
* SMTP用户名
* @param smtpPassword
* SMTP密码
* @param toMail
* 收件人邮箱
* @param subject
* 主题
* @param templatePath
* 模板路径
* @param model
* 数据
* @param async
* 是否异步
*/
public void send(String smtpHost, Integer smtpPort, String smtpUsername, String smtpPassword, String toMail, String subject, String templatePath, Map<String, Object> model, boolean async) {
Assert.hasText(smtpHost);
Assert.notNull(smtpPort);
Assert.hasText(smtpUsername);
Assert.hasText(smtpPassword);
Assert.hasText(toMail);
Assert.hasText(subject);
Assert.hasText(templatePath);
try {
//Setting setting = SettingUtils.get();
Configuration configuration = freemarkerConfig.getConfiguration();
Template template = configuration.getTemplate(templatePath);
String text = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
javaMailSender.setHost(smtpHost);
javaMailSender.setPort(smtpPort);
javaMailSender.setUsername(smtpUsername);
javaMailSender.setPassword(smtpPassword);
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, false, "utf-8");
mimeMessageHelper.setFrom(smtpUsername);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setTo(toMail);
mimeMessageHelper.setText(text, true);
if (async) {
addSendTask(mimeMessage);
} else {
javaMailSender.send(mimeMessage);
}
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
/**
* 添加邮件发送任务
*
* @param mimeMessage
* MimeMessage
*/
private void addSendTask(final MimeMessage mimeMessage) {
try {
taskExecutor.execute(new Runnable() {
public void run() {
javaMailSender.send(mimeMessage);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}