没有合适的资源?快使用搜索试试~ 我知道了~
首页Spring全家桶.pdf
资源详情
资源评论
资源推荐
10 分钟实现 Spring Boot 发⽣邮件功能
yizhiwazi
2019-11-25Java后端
点击上⽅ Java后端,选择 设为星标
优质⽂章,及时送达
作者 | yizhiwazi
链接 | www.jianshu.com/p/5eb000544dd7
基础知识基础知识
什么是SMTP?什么是SMTP?
SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是⼀组⽤于从源地址到⽬的地址传输邮件的规范,通过
它来控制邮件的中转⽅式。SMTP认证要求必须提供账号和密码才能登陆服务器,其设计⽬的在于避免⽤⼾受到垃圾邮件的侵
扰。
什么是IMAP?什么是IMAP?
IMAP全称为Internet Message Access Protocol(互联⽹邮件访问协议),IMAP允许从邮件服务器上获取邮件的信息、下载邮
件等。IMAP与POP类似,都是⼀种邮件获取协议。
什么是POP3?什么是POP3?
POP3全称为Post Office Protocol 3(邮局协议),POP3⽀持客⼾端远程管理服务器端的邮件。POP3常⽤于“离线”邮件处
理,即允许客⼾端下载服务器邮件,然后服务器上的邮件将会被删除。⽬前很多POP3的邮件服务器只提供下载邮件功能,服务
器本⾝并不删除邮件,这种属于改进版的POP3协议。
IMAP和POP3协议有什么不同呢?IMAP和POP3协议有什么不同呢?
两者最⼤的区别在于,IMAP允许双向通信,即在客⼾端的操作会反馈到服务器上,例如在客⼾端收取邮件、标记已读等操作,服
务器会跟着同步这些操作。⽽对于POP协议虽然也允许客⼾端下载服务器邮件,但是在客⼾端的操作并不会同步到服务器上⾯
的,例如在客⼾端收取或标记已读邮件,服务器不会同步这些操作。
进阶知识进阶知识
什么是JavaMailSender和JavaMailSenderImpl?什么是JavaMailSender和JavaMailSenderImpl?
JavaMailSender和JavaMailSenderImpl 是Spring官⽅提供的集成邮件服务的接⼝和实现类,以简单⾼效的设计著称,⽬前是
Java后端发送邮件和集成邮件服务的主流⼯具。
如何通过JavaMailSenderImpl发送邮件?如何通过JavaMailSenderImpl发送邮件?
⾮常简单,直接在业务类注⼊JavaMailSenderImpl并调⽤send⽅法发送邮件。其中简单邮件可以通过SimpleMailMessage来发
送邮件,⽽复杂的邮件(例如添加附件)可以借助MimeMessageHelper来构建MimeMessage发送邮件。例如:
@Autowired@Autowired
privateprivate JavaMailSenderImpl mailSender;
publicpublic voidvoid sendMailsendMail() throwsthrows MessagingException {
//简单邮件
SimpleMailMessage simpleMailMessage = newnew SimpleMailMessage();
simpleMailMessage.setFrom("admin@163.com");
simpleMailMessage.setTo("socks@qq.com");
simpleMailMessage.setSubject("Happy New Year");
simpleMailMessage.setText("新年快乐!");
mailSender.send(simpleMailMessage);
//复杂邮件
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = newnew MimeMessageHelper(mimeMessage);
messageHelper.setFrom("admin@163.com");
messageHelper.setTo("socks@qq.com");
messageHelper.setSubject("Happy New Year");
messageHelper.setText("新年快乐!");
messageHelper.addInline("doge.gif", newnew File("xx/xx/doge.gif"));
messageHelper.addAttachment("work.docx", newnew File("xx/xx/work.docx"));
mailSender.send(mimeMessage);
}
为什么JavaMailSenderImpl 能够开箱即⽤ ?为什么JavaMailSenderImpl 能够开箱即⽤ ?
所谓开箱即⽤其实就是基于官⽅内置的⾃动配置,翻看源码可知晓邮件⾃动配置类(MailSenderPropertiesConfiguration) 为上
下⽂提供了邮件服务实例(JavaMailSenderImpl)。具体源码如下:
@Configuration@Configuration
@ConditionalOnProperty@ConditionalOnProperty(prefix = "spring.mail", name = "host")
classclass MailSenderPropertiesConfigurationMailSenderPropertiesConfiguration {
privateprivate finalfinal MailProperties properties;
MailSenderPropertiesConfiguration(MailProperties properties) {
thisthis.properties = properties;
}
@Bean@Bean
@ConditionalOnMissingBean@ConditionalOnMissingBean
publicpublic JavaMailSenderImpl mailSendermailSender() {
JavaMailSenderImpl sender = newnew JavaMailSenderImpl();
applyProperties(sender);
returnreturn sender;
}
其中MailProperties是关于邮件服务器的配置信息,具体源码如下:
@ConfigurationProperties@ConfigurationProperties(prefix = "spring.mail")
publicpublic classclass MailProperties {
privateprivate staticstatic final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
privateprivate String host;
privateprivate Integer port;
privateprivate String username;
privateprivate String password;
privateprivate String protocol = "smtp";
privateprivate Charset defaultEncoding = DEFAULT_CHARSET;
privateprivate Map<String, String> properties = newnew HashMap<>();
}
使⽤教程使⽤教程
⼀、开启邮件服务⼀、开启邮件服务
登陆⽹易邮箱163,在设置中打开并勾选POP3/SMTP/IMAP服务,然后会得到⼀个授权码,这个邮箱和授权码将⽤作登陆认证。
⼆、⼆、配置邮件服务配置邮件服务
⾸先咱们通过 Spring Initializr 创建⼯程springboot-send-mail,如图所⽰:
然后在pom.xml 引⼊web、thymeleaf 和spring-boot-starter-mail等相关依赖。例如:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>webjars-locator-core</artifactId>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>3.3.7</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
根据前⾯提到的配置项(MailProperties)填写相关配置信息,其中spring.mail.username 表⽰连接邮件服务器时认证的登陆账
号,可以是普通的⼿机号或者登陆账号,并⾮⼀定是邮箱,为了解决这个问题,推荐⼤家在spring.mail. properties.from填写邮
件发信⼈即真实邮箱。
Tips:关注微信公众号:Java后端,每⽇提送技术博⽂。
然后在application.yml添加如下配置:
spring:
mail:
host: smtp.163.com #SMTP服务器地址
username: socks #登陆账号
password: 123456 #登陆密码(或授权码)
properties:
from: socks@163.com #邮件发信⼈(即真实邮箱)
thymeleaf:
cache: false
prefix: classpath:/views/
servlet:
multipart:
max-file-size: 10MB #限制单个⽂件⼤⼩
max-request-size: 50MB #限制请求总量
剩余769页未读,继续阅读
LP_bin
- 粉丝: 92
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1