`

spring配gmail

 
阅读更多

 

  1. 配置清单

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

          <property name="host">  

             <value>smtp.gmail.com</value>  

         </property> 

         <property name="javaMailProperties">  

            <props>  

            <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>  

                <prop key="mail.smtp.socketFactory.fallback">false</prop>  

                <prop key="mail.smtp.port">465</prop>  

                <prop key="mail.smtp.socketFactory.port">465</prop>   

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

                <prop key="mail.smtp.timeout">25000</prop>  

            </props>  

         </property>  

         <property name="username">  

             <value>××××××××</value>  

         </property>  

         <property name="password">  

             <value>××××××</value>  

         </property>

 

          <!-- 上是GMAIL特殊端口465或587,下是配置为25端口(默认)

<property name="host">  

             <value>smtp.163.com</value>  

         </property>  

         <property name="javaMailProperties">  

            <props>  

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

                 <prop key="mail.smtp.timeout">25000</prop>  

            </props>  

         </property>  

         <property name="username">  

             <value>××××××××××</value>  

         </property>  

         <property name="password">  

             <value>×××××××</value>  

         </property>    -->

    </bean> 

 

2. 注入

 

 @Autowired

 private org.springframework.mail.javamail.JavaMailSenderImpl mailSender;

 

3.发送代码

try {

MimeMessage mailMessage = mailSender.createMimeMessage();

// 设置utf-8或GBK编码,否则邮件会有乱码

MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage, true, "utf-8");

// 设置收件人,寄件人

messageHelper.setTo(email);

messageHelper.setFrom(mailSender.getUsername()); messageHelper.setSubject(PropertiesUtil.getProperties("html_mail_subject"));

// true 表示启动HTML格式的邮件 messageHelper.setText(FreeMarkerUtils.getHtml(targetDir, targetName), true);

// 发送邮件

mailSender.send(mailMessage); return true;

} catch (MessagingException e) {

// TODO Auto-generated catch block e.printStackTrace();

msg.append("*提示:邮件未能正常发送,请重新申请!");

return false;

}

 

 

以上只是记录,其中使用Freemarker做HTML邮件模板处理

附录:

 

properties文件:

 

#html for email to user find back password 

html_file_patch=${tempDir}/html/

http_miv = http://localhost:8080/miv-main/login/retrievePasswordJsp/

html_mail_subject = 找回MIV密码

 

附:

 

package com.miv.core.utils;

 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.UnsupportedEncodingException;

import java.io.Writer;

import java.util.HashMap;

import java.util.List;

import java.util.Locale;

import java.util.Map;

 

import freemarker.template.Configuration;

import freemarker.template.DefaultObjectWrapper;

import freemarker.template.Template;

import freemarker.template.TemplateExceptionHandler;

 

public class FreeMarkerUtils {

    public static void generateHtml(String sourceDir, String sourceName, String targetDir, String targetName, List data)

            throws Exception {

 

        // 模板路径

        Configuration cfg = new Configuration();

        // 设置Configuration编码

        cfg.setEncoding(Locale.getDefault(), "UTF-8");

        // 加载free marker模板文件

        cfg.setDirectoryForTemplateLoading(new File(sourceDir));

 

        // 设置对象包装器

        cfg.setObjectWrapper(new DefaultObjectWrapper());

 

        // 设计异常处理器

        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);

 

        // 定义并设置数据

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

        map.put("persons", data);

        // 获取指定模板文件

        Template template = cfg.getTemplate(sourceName);

        // 设置模板的编码

        template.setEncoding("UTF-8");

 

        // 定义输入文件,默认生成在工程根目录 ,并且设置输出流的编码;

        Writer out = new OutputStreamWriter(new FileOutputStream(targetDir + targetName), "UTF-8");

 

        // 最后开始生成

        template.process(map, out);

 

    }

 

    public static void generateHtml(String sourceDir, String sourceName, String targetDir, String targetName,

            String data) throws Exception {

 

        // 模板路径

        Configuration cfg = new Configuration();

        // 设置Configuration编码

        cfg.setEncoding(Locale.getDefault(), "UTF-8");

        // 加载free marker模板文件

        cfg.setDirectoryForTemplateLoading(new File(sourceDir));

 

        // 设置对象包装器

        cfg.setObjectWrapper(new DefaultObjectWrapper());

 

        // 设计异常处理器

        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);

 

        // 定义并设置数据

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

        map.put("prop", data);

        // 获取指定模板文件

        Template template = cfg.getTemplate(sourceName);

        // 设置模板的编码

        template.setEncoding("UTF-8");

 

        // 创建路径

        mkdir(targetDir);

        // 定义输入文件,默认生成在工程根目录 ,并且设置输出流的编码;

        Writer out = new OutputStreamWriter(new FileOutputStream(targetDir + targetName), "UTF-8");

 

        // 最后开始生成

        template.process(map, out);

 

    }

 

    public static String getHtml(String targetDir, String targetName) {

        BufferedReader bufferreader = null;

        StringBuffer sb = new StringBuffer();

        FileInputStream inputStream = null;

        InputStreamReader inputStreamReader = null;

        try {

            inputStream = new FileInputStream(targetDir + targetName);

            inputStreamReader = new InputStreamReader(inputStream, "UTF-8");

            bufferreader = new BufferedReader(inputStreamReader);

            String line = bufferreader.readLine();

            while (line != null) {

                sb.append(line);

                line = bufferreader.readLine();

            }

            bufferreader.close();

        } catch (UnsupportedEncodingException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (FileNotFoundException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return sb.toString();

    }

 

    // 创建文件路径

    public static void mkdir(String  targetDir) {

        File fd = null;

        try {

            fd = new File( targetDir);

            if (!fd.exists()) {

                fd.mkdirs();

            }

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            fd = null;

        }

    }

 

    public static String getSourceDir() {

        return FreeMarkerUtils.class.getResource("/").getPath().split("WEB-INF")[0] + "WEB-INF/freemarker";

    }

}


模板:test.ftl

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>    
    <title>找回密码</title>
  </head>
  <body> 
尊敬的MIV用户:
<br/>
您好!
<br/>
请点击以下链接进行下一步操作:
<br/>
<a href='${prop}'>${prop}</a>
<br/>
如果上面的链接无法点击,您也可以复制链接,粘贴到您浏览器的地址栏内,然后按“回车”键打开预设页面,完成相应功能。
<br/>
如果有其他问题,请联系我们: 谢谢!
<br/>
此为系统消息,请勿回复
  </body>
</html>
分享到:
评论

相关推荐

    Spring Framework 4.x Reference Documentation 中文翻译

    利用业余时间对此进行翻译,并在原文的基础上,插入配图,图文并茂方便用户理解。如有勘误欢迎指正,点此提问。如有兴趣,也可以参与到本翻译工作中来 :) 从目录开始阅读吧 Contact: Blog:www.waylau.com Gmail: ...

    oracle+struts2.0+hibernate3.1+spring2.0实验代码与前面发布的实验指导配套

    oracle+struts2.0+hibernate3.1+spring2.0实验代码与前面发布的实验指导配套,由于所需要的包实在太打,所以请你们根据实验指导到相应地方找,实在找不到请email: haoxing272@gmail.com&lt;br&gt;一起努力…………

    Mail-archiver

    3. **服务器端技术**:后端可能使用Node.js、Python的Django或Flask,或者Java的Spring Boot等服务器端框架,处理用户请求、与数据库交互并执行归档逻辑。 4. **API接口**:如果邮件归档系统需要集成其他邮件服务...

    [AB PLC例程源码][MMS_044666]Translation N-A.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    kolesar_3cd_01_0716.pdf

    kolesar_3cd_01_0716

    latchman_01_0108.pdf

    latchman_01_0108

    matlab程序代码项目案例:matlab程序代码项目案例MPC在美国高速公路场景中移动的车辆上的实现.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    pimpinella_3cd_01_0716.pdf

    pimpinella_3cd_01_0716

    petrilla_01_0308.pdf

    petrilla_01_0308

    [AB PLC例程源码][MMS_041452]Speed Controls in Plastic Extrusion.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    强化学习驱动下DeepSeek技术创新及其对AI发展的影响

    内容概要:本文档由张卓老师讲解,重点探讨DeepSeek的技术革新及强化学习对未来AI发展的重要性。文章回顾了AI的历史与发展阶段,详细解析Transformer架构在AI上半场所起到的作用,深入介绍了MoE混合专家以及MLA低秩注意机制等技术特点如何帮助DeepSeek在AI中场建立优势,并探讨了当前强化学习的挑战和边界。文档不仅提及AlphaGo和小游戏等成功案例来说明强化学习的强大力量,还提出了关于未来人工通用智能(AGI)的展望,特别是如何利用强化学习提升现有LLMs的能力和性能。 适用人群:本资料适宜对深度学习感兴趣的研究人员、开发者以及想要深入了解人工智能最新进展的专业人士。 使用场景及目标:通过了解最新的AI技术和前沿概念,在实际工作中能够运用更先进的工具和技术解决问题。同时为那些寻求职业转型或者学术深造的人提供了宝贵的参考。 其他说明:文中提到了许多具体的例子和技术细节,如DeepSeek的技术特色、RL的理论背景等等,有助于加深读者对于现代AI系统的理解和认识。

    有师傅小程序开源版v2.4.14+前端.zip

    有师傅小程序开源版v2.4.14 新增报价短信奉告 优化部分细节

    [AB PLC例程源码][MMS_047333]Motor Sequence Starter with timers to start.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    商城二级三级分销系统(小程序+后台含源码).zip

    商城二级三级分销系统(小程序+后台含源码).zip

    li_3ck_01b_0918.pdf

    li_3ck_01b_0918

    nicholl_3cd_01_0516.pdf

    nicholl_3cd_01_0516

    1995-2022年 网络媒体关注度、报刊媒体关注度与媒体监督相关数据.zip

    媒体关注度是一个衡量公众对某个事件、话题或个体关注程度的重要指标。它主要反映了新闻媒体、社交媒体、博客等对于某一事件、话题或个体的报道和讨论程度。 媒体监督的J-F系数(Janis-Fadner系数)是一种用于测量媒体关注度的指标,特别是用于评估媒体对企业、事件或话题的监督力度。J-F系数基于媒体报道的正面和负面内容来计算,从而为公众、研究者或企业提供一个量化工具,以了解媒体对其关注的方向和强度。 本数据含原始数据、参考文献、代码do文件、最终结果。参考文献中JF系数计算公式。 指标 代码、年份、标题出现该公司的新闻总数、内容出现该公司的新闻总数、正面新闻数全部、中性新闻数全部、负面新闻数全部、正面新闻数原创、中性新闻数原创、负面新闻数原创,媒体监督JF系数。

    [AB PLC例程源码][MMS_040315]Double INC and Double DEC of INT datatype.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_047773]Convert Feet to Millimeters.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_042349]How to read-write data to-from a PLC using OPC in Visual Basic 6.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

Global site tag (gtag.js) - Google Analytics