java SpringMVC 邮件发送配置及Code

来源:互联网 发布:淘宝没有代付选项 编辑:程序博客网 时间:2024/04/30 04:15

首先是spring中的配置:(我里面使用了FreeMarker模板引擎)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!--邮件发送实现类-->
    <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>

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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();
        }
    }
}

服务层调用:

1、要注入发送邮件工具类

   

?
1
2
    @Inject
    private MailSender mailSender;

  2、调用代码

    

        

?
1
2
3
4
        User user = (User)request.getSession().getAttribute("user");
        String url = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+
                request.getContextPath();
        mailSender.send(user,url,email);

0 0