SpringMVC 郵件發送配置及代碼

jopen 9年前發布 | 9K 次閱讀 Java SpringMVC

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

<!--郵件發送實現類-->
    <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();
        }
    }
}


服務層調用:

1、要注入發送郵件工具類

   

    @Inject
    private MailSender mailSender;


  2、調用代碼

    

        

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



 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!