SpringBoot(十三):JavaMailSender邮件服务

版权声明

本作品采用<a rel="license" href="http://creativecommons.org/licenses/by/4.0/">知识共享署名 4.0 国际许可协议</a>进行许可。
本文作者:低调小熊猫
文章链接:https://aodeng.cc/archives/springbootshisans
转载声明:自由转载-非商用-非衍生-保持署名,非商业转载请注明作者及出处,商业转载请联系作者本人qq:2696284032

单纯的广告

个人博客:https://aodeng.cc
微信公众号:低调小熊猫
qq交流群:756796932

简介

发送邮件可以实现,注册验证,忘记密码等功能,还可以打广告,可谓很nice的功能了

使用

添加依赖

<!--mail-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

配置文件

spring:
  mail:
    host: *** #//邮箱服务器地址
    username: ***
    password: ***
    default-encoding: UTF-8
#以谁来发送邮件
mail.fromMail.addr: ***

封装接口

public interface EmailService {
    void sendTextEmail(String to,String subject,String content);
    void sendHtmlEmali(String to,String subject,String content);
    void sendAttachmentsEmail(String to,String subject,String content,String filePath);
    void sendStaticResourcesEmail(String to,String subject,String content,String rscPath,String rscId);
}

实现接口,这里是关键代码了

/**
 * @program:hope
 * @author:aodeng
 * @create:2018-10-11 13:25
 **/
@Service
public class EmaliServiceImpl implements EmailService {

    private static final Logger log= LoggerFactory.getLogger(EmaliServiceImpl.class);
    @Autowired
    private JavaMailSender mailSender;

    @Value("${mail.fromMail.addr}")
    private String from;

    /***
     * 发送文本邮件
     * @param to
     * @param subject
     * @param content
     */
    @Override
    public void sendTextEmail(String to, String subject, String content) {
        SimpleMailMessage mailMessage=new SimpleMailMessage();
        mailMessage.setFrom(from);
        mailMessage.setTo(to);
        mailMessage.setSubject(subject);
        mailMessage.setText(content);
        try {
            mailSender.send(mailMessage);
            log.info("[文本邮件发送成功,当前时间]-[{}]",new Date());
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /***
     * html邮件
     * @param to
     * @param subject
     * @param content
     */
    @Override
    public void sendHtmlEmali(String to, String subject, String content) {
        MimeMessage message=mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper=new MimeMessageHelper(message,true);//true表示创建一个multipart message
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content);
            //发送邮件
            mailSender.send(message);
            log.info("[html邮件发送成功,当前时间]-[{}]",new Date());
        }catch (MessagingException e){
            e.printStackTrace();
        }
    }

    /***
     * 附件邮件
     * @param to
     * @param subject
     * @param content
     * @param filePath
     */
    @Override
    public void sendAttachmentsEmail(String to, String subject, String content, String filePath) {
        MimeMessage message=mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper=new MimeMessageHelper(message,true);//true表示创建一个multipart message
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content,true);
            //上传附件
            FileSystemResource resource=new FileSystemResource(new File(filePath));
            String fileName=filePath.substring(filePath.lastIndexOf(File.separator));
            helper.addAttachment(fileName,resource);
            //发送邮件
            mailSender.send(message);
            log.info("[附件邮件发送成功,当前时间]-[{}]",new Date());
        }catch (MessagingException e){
            e.printStackTrace();
        }
    }

    /***
     * 嵌入静态资源邮件
     * @param to
     * @param subject
     * @param content
     * @param rscPath
     * @param rscId
     */
    @Override
    public void sendStaticResourcesEmail(String to, String subject, String content, String rscPath, String rscId) {
        MimeMessage message=mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper=new MimeMessageHelper(message,true);//true表示创建一个multipart message
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content,true);
            //嵌入静态资源
            FileSystemResource resource=new FileSystemResource(new File(rscPath));
            helper.addInline(rscId,resource);

            //发送邮件
            mailSender.send(message);
            log.info("[嵌入静态资源邮件发送成功,当前时间]-[{}]",new Date());
        }catch (MessagingException e){
            e.printStackTrace();
        }
    }

}

测试功能

@Test
    public void test1(){
        //for(int i=0;i<=2;i++){
            emailService.sendTextEmail("邮件地址","测试","收到请回复,over!");
        //}
    }
    @Test
    public void test2(){
        String content="<html>\n" +
                "<body>\n" +
                "    <h3>hello world ! 这是一封html邮件!</h3>\n" +
                "</body>\n" +
                "</html>";
        emailService.sendHtmlEmali("邮件地址","测试",content);
    }
    @Test
    public void test3(){
        emailService.sendAttachmentsEmail("邮件地址","测试","收到请回复,over!","C:\\Users\\ad182\\Pictures\\image3\\a.jpg");
    }
    @Test
    public void test4(){
        String rscId = "neo006";
        String content="<html><body>这是有图片的邮件:<img src=\'cid:" + rscId + "\' ></body></html>";
        String imgPath = "C:\\Users\\ad182\\Pictures\\image3\\a.jpg";
        emailService.sendStaticResourcesEmail("邮件地址","测试",content,imgPath,rscId);
    }

还有一个发送邮件验证的功能
添加引擎模板

<!-- 模板引擎 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

创建一个页面,注意:页面名称和后台参数名称要一致

<body>
        您好,这是验证邮件,请点击下面的链接完成验证,<br/>
        <a href="#" th:href="@{ https://aodeng.cc/{id}(id=${id}) }">激活账号</a>
    </body>

发送验证邮件,其实就是后台拼接一个参数到页面,将页面发个用户,用户点击页面的带参数的链接,后台接收参数,然后就实现验证的功能了

    @Test
    public void test5() {
        //创建邮件正文
        org.thymeleaf.context.Context context = new org.thymeleaf.context.Context();
        context.setVariable("id", "006");
        String emailContent = templateEngine.process("emailTemplate", context);

        emailService.sendHtmlEmali("f12974049826@163.com","主题:这是模板邮件",emailContent);
    }

源码地址

https://github.com/java-aodeng/hope

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,129评论 25 707
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,723评论 2 59
  • 昨天整体情绪控制不错,可能也和一天躺在床上刷剧有关。今天要出去送晨晨上学,出去吃饭,出去走走,希望也能控制住自己的情绪。
    田田_7018阅读 203评论 0 0
  • 转两篇Python的面向对象文章 。稍后再看看国外的书是怎么写的。 Python 面向对象(初级篇)http://...
    SeanCheney阅读 1,042评论 0 17