SpringMVC 邮件发送

时间:2023-03-09 00:52:51
SpringMVC 邮件发送

<!--邮件发送实现类-->

<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">

<property name="host" value="smtp.qq.com"/>

<property name="port" value="25"/>

<property name="username" value=" 你的邮箱 "/>

<property name="password" value=" 你的邮箱密码 "/>

<property name="javaMailProperties">

<props >

<prop key="mail.smtp.auth">true</prop>

</props>

</property>

</bean>

<bean id="simpleMailMessage" class="org.springframework.mail.SimpleMailMessage">

<property name="from" value=" 发件人" />

<property name="subject" value=" 邮件主题 " />

<!--

<property name="text" value=" 邮件内容 " />

-->

</bean>

<!--线程池异步发送邮件-->

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">

<property name="corePoolSize" value="5" />

<property name="maxPoolSize" value="10" />

<property name="queueCapacity" value="25" />

</bean>

<!--FreeMarker 模板-->

<bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">

<property name="templateLoaderPath" value="classpath:template" />

<!--<property name="templateLoaderPath" value="/template" />-->

<property name="freemarkerSettings">

<props>

<prop key="locale">zh_CN</prop>

<prop key="default_encoding">UTF-8</prop>

</props>

</property>

</bean>

发送邮件的工具类:(采用注解形式注入管理邮件发送的类)

public class MailSender {

@Inject

private JavaMailSender javaMailSender;

@Inject

private SimpleMailMessage simpleMailMessage;

@Inject

private FreeMarkerConfigurer freeMarkerConfigurer;

@Inject

private TaskExecutor taskExecutor;

/**

*  构建邮件内容,发送邮件。

* @param user   用户

* @param url    链接

*/

public void send(User user, String url,String email) {

String nickname = user.getNickname();

String to = email;

String text = "";

Map<String, String> map = new HashMap<String, String>(1);

map.put("url", url);

try {

//             从FreeMarker模板生成邮件内容

Template template = freeMarkerConfigurer.getConfiguration().getTemplate("register_mail.ftl");

//             模板中用 ${XXX}站位,map 中key为 XXX的value 会替换占位符内容。

text = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);

} catch (IOException e) {

e.printStackTrace();

} catch (TemplateException e) {

e.printStackTrace();

}

this.taskExecutor.execute(new SendMailThread(to,null,text));

}

//     内部线程类,利用线程池异步发邮件。

private class SendMailThread implements Runnable {

private String to;

private String subject;

private String content;

private SendMailThread(String to, String subject, String content) {

super();

this.to = to;

this.subject = subject;

this.content = content;

}

@Override

public void run() {

sendMail(to, subject, content);

}

}

/**

*  发送邮件

* @param to         收件人邮箱

* @param subject    邮件主题

* @param content    邮件内容

*/

public void sendMail(String to, String subject, String content) {

try {

MimeMessage message = javaMailSender.createMimeMessage();

MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");

messageHelper.setFrom(simpleMailMessage.getFrom());

if (subject != null) {

messageHelper.setSubject(subject);

} else {

messageHelper.setSubject(simpleMailMessage.getSubject());

}

messageHelper.setTo(to);

messageHelper.setText(content, true);

javaMailSender.send(message);

} catch (MessagingException e) {

e.printStackTrace();

}

}