- 我们平时都会想到发一封邮件的需求,无论是工作需要,还是朋友间沟通,那么怎么能用java发一封邮件呢,我们先从邮件的协议说起
邮件的协议
- SMTP(Simple Mal Translate Protocol)
它是客户端向邮箱服务器发送邮件的协议 - POP3(Post Office Protocl 3)
它是客户端从服务器获取邮件的协议 - IMAP(Internet Mail Access Protocl)
与POP3一样,也是获取邮件的协议,它是POP3的增强版
邮件的流转
比如你想用QQ邮箱给139邮箱发一封邮件
- 1.首先你需要发送邮件到QQ邮箱服务器
- 2.QQ邮箱服务器收到邮件后会发给139邮箱服务器
- 3.最后你在139邮箱上读取邮件内容
那么你在这个过程中,都使用了什么协议?
- 1.首先你需要发送邮件到QQ邮箱服务器(这个过程使用的是POP3协议或IMAP协议)
- 2.QQ邮箱服务器收到邮件后会发给139邮箱服务器(同样这个过程,也使用的是POP3协议或IMAP协议)
- 3.最后你在139邮箱上读取邮件内容(这个过程使用的是SMTP协议)
邮件开启POP3/STMP、IMAP/STMP
以139邮箱为例,首先点击“账户信息”,找到“邮箱协议设置”,然后"开启POP3/STMP服务"选项打勾
- 这样根据邮箱的账号密码,就可以用java代码往邮箱上发邮件了,下面进入代码编写
代码编写
Spring Boot 简化了发送邮件的配置,下面以 Spring Boot 来发送邮件,IDEA IntelliJ 来创建 Spring boot 项目,选了两个依赖:Spring Web 和 Java Mail Sender,Spring Web 就不说了,就是一个 JavaWeb 项目的依赖,Java Mail Sender 是 Spring Boot 提供的邮件发送工具
创建后在 application.properties 中添加如下内容
spring.mail.host=smtp.139.com
spring.mail.port=25
[email protected]
spring.mail.password=Xuanjin01
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.stmp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true
解释下 application.properties配置内容的含义
- spring.mail.host=smtp.139.com 139邮箱的服务地址
- spring.mail.port=25 不带SSL的端口
- [email protected] 邮箱的真实账号
- spring.mail.password=Xuanjin01 邮箱的真实密码(如果是 QQ 邮箱是一串加密串)
- spring.mail.default-encoding=UTF-8 邮件内容的编码
- spring.mail.properties.mail.stmp.socketFactory.class=javax.net.ssl.SSLSocketFactory 这个类是Socket用的,大概是指定SSL的Socket工厂类
- spring.mail.properties.mail.debug=true 在控制台打印邮件的发送过程
可能有些人要问,邮箱服务器地址和端口哪里来的,其实每个邮箱都有说明,以 139 邮箱为例,在上面第二张图上的箭头指向的“需要帮助?”里,就有说明,我先截下图:
好了,由于发送邮件代码比较简单,就直接在test里编码了
@SpringBootTest
class MailApplicationTests {
@Autowired
JavaMailSender javaMailSender;//配置好后,Spring Boot自动生成的邮件发送对象
@Test
void contextLoads() {
SimpleMailMessage msg = new SimpleMailMessage();
msg.setFrom("[email protected]");//发件人
msg.setSentDate(new Date());//发送日期
msg.setSubject("这是测试主题");//发送主题
msg.setText("这是测试内容");//发送内容
msg.setTo("[email protected]");//收件人
javaMailSender.send(msg);//发送
}
- 由于我其他邮箱开头不了 POP3/STMP 协议(主要是其他邮箱要手机号验证,我换号了),就自己给自己的 139 邮箱发邮件吧,我们看到只需要短短7行代码就可以了,执行@Test测试方法,控制台可以看见邮件的发送过程
查看139邮箱
- 看见了刚才发送的邮件
- 打开
好了,第一封简单的邮件发送就先写到这里,下一篇,我将介绍如何发送有附件的邮件和邮件内容就有图片的邮件,敬请期待!Spring Boot发送邮件二——带附件和内容有图片的邮件