2019-12-17

首页下载APP

SpringBoot发送邮件

BestbpF

SpringBoot发送邮件

BestbpF

0.3982018.09.15 11:03:43字数 698阅读 6,870

简述

在日常工作开发中,发送邮件功能有时需要我们去开发使用,这里首先介绍以下与发送接受邮件相关的一些协议:

发送邮件:SMPT、MIME,是一种基于"推"的协议,通过SMPT协议将邮件发送至邮件服务器,MIME协议是对SMPT协议的一种补充,如发送图片附件等

接收邮件:POP、IMAP,是一种基于"拉"的协议,收件人通过POP协议从邮件服务器拉取邮件

嘿嘿,讲的太简单了,具体资料大家可以上网或看书来进一步了解,很多的哦

使用SpringBoot发送邮件

使用SpirngBoot发送邮件,首先需要引入mail依赖

org.springframework.bootspring-boot-starter-mail

然后在配置文件application.properties中加入相关配置信息

#这里以QQ邮箱为例#QQ邮箱服务器spring.mail.host=smtp.qq.com#你的QQ邮箱账户[email protected]#你的QQ邮箱第三方授权码spring.mail.password=yourPassword#编码类型spring.mail.default-encoding=UTF-8

开启邮箱第三方支持以及获取授权码(以QQ邮箱为例)

打开QQ邮箱,点击设置

选择账户,并下拉找到

2019-12-17_第1张图片

开启第一个或前两个,然后点击生成授权码,写到SpringBoot配置文件中

开始撸代码

代码可到springboot2.x发送邮件中下载

代码以自定义成员方法为例,需要准备

privatefinalLogger logger=LoggerFactory.getLogger(MailServiceImpl.class);@Value("${spring.mail.username}")//使用@Value注入application.properties中指定的用户名privateString from;@Autowired//用于发送文件privateJavaMailSender mailSender;

定义发送邮件接口

public interfaceMailService{/**

    * 发送普通文本邮件

    * @param to 收件人

    * @param subject 主题

    * @param content 内容

    */voidsendSimpleMail(String to,String subject,String content);/**

    * 发送HTML邮件

    * @param to 收件人

    * @param subject 主题

    * @param content 内容(可以包含等标签)

    */voidsendHtmlMail(String to,String subject,String content);/**

    * 发送带附件的邮件

    * @param to 收件人

    * @param subject 主题

    * @param content 内容

    * @param filePath 附件路径

    */voidsendAttachmentMail(String to,String subject,String content,String filePath);/**

    * 发送带图片的邮件

    * @param to 收件人

    * @param subject 主题

    * @param content 文本

    * @param rscPath 图片路径

    * @param rscId 图片ID,用于在标签中使用,从而显示图片

    */voidsendInlineResourceMail(String to,String subject,String content,String rscPath,String rscId);}

【发送普通邮件】

我们这里的普通邮件是指最为普通的纯文本邮件

publicvoidsendSimpleMail(String to,String subject,String content){SimpleMailMessage message=newSimpleMailMessage();message.setTo(to);//收信人message.setSubject(subject);//主题message.setText(content);//内容message.setFrom(from);//发信人mailSender.send(message);}

【发送HTML文件】

HTML文件就是指在文件内容中可以添加等标签,收件人收到邮件后显示内容也和网页一样,比较丰富多彩

publicvoidsendHtmlMail(String to,String subject,String content){logger.info("发送HTML邮件开始:{},{},{}",to,subject,content);//使用MimeMessage,MIME协议MimeMessage message=mailSender.createMimeMessage();MimeMessageHelper helper;//MimeMessageHelper帮助我们设置更丰富的内容try{helper=newMimeMessageHelper(message,true);helper.setFrom(from);helper.setTo(to);helper.setSubject(subject);helper.setText(content,true);//true代表支持htmlmailSender.send(message);logger.info("发送HTML邮件成功");}catch(MessagingException e){logger.error("发送HTML邮件失败:",e);}}

【发送带附件的邮件】

带附件的邮件在HTML邮件上添加一些参数即可

publicvoidsendAttachmentMail(String to,String subject,String content,String filePath){logger.info("发送带附件邮件开始:{},{},{},{}",to,subject,content,filePath);MimeMessage message=mailSender.createMimeMessage();MimeMessageHelper helper;try{helper=newMimeMessageHelper(message,true);//true代表支持多组件,如附件,图片等helper.setFrom(from);helper.setTo(to);helper.setSubject(subject);helper.setText(content,true);FileSystemResource file=newFileSystemResource(newFile(filePath));String fileName=file.getFilename();helper.addAttachment(fileName,file);//添加附件,可多次调用该方法添加多个附件  mailSender.send(message);logger.info("发送带附件邮件成功");}catch(MessagingException e){logger.error("发送带附件邮件失败",e);}}

【发送带图片的邮件】

publicvoidsendInlineResourceMail(String to,String subject,String content,String rscPath,String rscId){logger.info("发送带图片邮件开始:{},{},{},{},{}",to,subject,content,rscPath,rscId);MimeMessage message=mailSender.createMimeMessage();MimeMessageHelper helper;try{helper=newMimeMessageHelper(message,true);helper.setFrom(from);helper.setTo(to);helper.setSubject(subject);helper.setText(content,true);FileSystemResource res=newFileSystemResource(newFile(rscPath));helper.addInline(rscId,res);//重复使用添加多个图片mailSender.send(message);logger.info("发送带图片邮件成功");}catch(MessagingException e){logger.error("发送带图片邮件失败",e);}}

测试

使用SpirngBoot Junit Test进行简单测试

importorg.junit.Test;importorg.junit.runner.RunWith;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.test.context.junit4.SpringRunner;importorg.thymeleaf.TemplateEngine;importorg.thymeleaf.context.Context;@RunWith(SpringRunner.class)@SpringBootTestpublicclassServiceTest{@AutowiredprivateMailService mailService;@AutowiredprivateTemplateEngine templateEngine;/**

    * 发送简单纯文本邮件

    */@TestpublicvoidsendSimpleMail(){mailService.sendSimpleMail("[email protected]","发送邮件测试","大家好,这是我用springboot进行发送邮件测试");}/**

    * 发送HTML邮件

    */@TestpublicvoidsendHtmlMail(){String content="

"+"大家好,这是springboot发送的HTML邮件"+"

";mailService.sendHtmlMail("[email protected]","发送邮件测试",content);}/**

    * 发送带附件的邮件

    */@TestpublicvoidsendAttachmentMail(){String content="

"+"大家好,这是springboot发送的HTML邮件,有附件哦"+"

";String filePath="your file path";mailService.sendAttachmentMail("[email protected]","发送邮件测试",content,filePath);}/**

    * 发送带图片的邮件

    */@TestpublicvoidsendInlineResourceMail(){String rscPath="your picture path";String rscId="001";String content="

"+"大家好,这是springboot发送的HTML邮件,有图片哦"+"

"+"";mailService.sendInlineResourceMail("[email protected]","发送邮件测试",content,rscPath,rscId);}}

如何发送模板邮件?

这里我们提一下很常见的模板邮件,比如说我们注册账户,登录认证所收到的邮件即为模板邮件,特点就是内容不变,只是一些特点信息比如说验证码、认证链接等是动态变化的。

以Thymeleaf模板引擎为例来讲解(具体语法自行了解)

在template文件夹下创建emailTemplate.html

邮件模板您好,感谢您的注册,这是一封验证邮件,请点击下面的链接完成注册,感谢您的支持!
激活账户

在模板页面中,id是动态变化的,需要我们传参设置,其实就是传参后,将页面解析为HTML字符串,作为我们邮件发送的主体内容

【测试】

/**

    * 指定模板发送邮件

    */@TestpublicvoidtestTemplateMail(){//向Thymeleaf模板传值,并解析成字符串Context context=newContext();context.setVariable("id","001");String emailContent=templateEngine.process("emailTemplate",context);mailService.sendHtmlMail("[email protected]","这是一个模板文件",emailContent);}

具体测试结果大家自行测试!

"小礼物走一走,来关注我"

还没有人赞赏,支持一下

BestbpFgithub:https://github.com/BestbpF

如有问题,欢迎指正!

...

总资产61 (约6.06元)共写了3.8W字获得218个赞共65个粉丝

全部评论2

RainBow11212

3楼 08.06 15:17

应该是发送附件中文名称过长就会乱码

RainBow11212

2楼 08.06 15:10

发送亚索文件乱码

被以下专题收入,发现更多相似内容

Java程序员SpringBoot

推荐阅读更多精彩内容

使用SpringBoot发送邮件

前言 在项目中可能会碰到发送邮件的需求,这时,我们就可以使用SpringBoot的mail模块进行快速的开发。 配...

sT丶阅读 217评论 0赞 0

springboot发送邮件,java结合jms发邮件

近期学习java后台开发,学到了springboot发送邮件。感觉这也算是一个很实用的知识点,就在这里总结下,方便...

编程小石头阅读 258评论 0赞 5

2019-12-17_第2张图片

Spring Cloud

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...

卡卡罗2017阅读 71,417评论 12赞 116

Python3实现自动定时发送邮件功能

Python SMTP发送邮件 SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、H...

SamBrother阅读 5,492评论 4赞 12

当你老了

当你老了 你要知道 你要适时假装木讷 不要总是敏感哀伤 不要总是失落惆怅 多疑孩子的态度话语 唠叨子孙的衣食住行 ...

陶缨子阅读 147评论 16赞 27

2019-12-17_第3张图片

广告

BestbpF

总资产61 (约6.06元)

子类复写父类方法原则

阅读 3

记录一下leetcode中的sql题目(免费部分)

阅读 119

记录一次AOP存在的问题

阅读 37

推荐阅读

胡歌又获点赞:你有教养的样子,真帅

阅读 7,778

张梓琳3岁女儿曝光,看完后我酸酸酸酸酸了

阅读 7,864

巩俐,你凭什么演郎平?

阅读 9,978

为什么被你们吹爆了的《哪吒》,我只看到了满屏的尴尬?

阅读 203,871

58岁大妈装萝莉真相曝光:网上女神为什么这么多?看完这些你就懂了

阅读 35,004

广告

2019-12-17_第4张图片

你可能感兴趣的:(2019-12-17)