目录
二、在工具包中(util)添加发送邮件的工具类(EmailUtil)
三、在yml文件中添加配置(application.yml)
一、加入依赖
<!--邮件发送依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
二、在工具包中(util)添加发送邮件的工具类(EmailUtil)
package cn.com.fanjingxuan.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
/**
* @ClassName EmailUtil
* @Description 邮件发送工具
* @Author Sophia
* @Date 2022/4/6 16:06
*/
@Component
public class EmailUtil {
@Value("${spring.mail.from}") // 从application.yml配置文件中获取
private String from; // 发送发邮箱地址
//当我们在使用@Autowired注解的时候,默认required=true,表示注入的时候bean必须存在,否则注入失败。
//解决方案:在自动转配的注解后面添加(required=false)
@Autowired(required=false)
private JavaMailSenderImpl mailSender;
/**
* 发送纯文本邮件信息
*
* @param to 接收方
* @param subject 邮件主题
* @param content 邮件内容(发送内容)
*/
public void sendMessage(String to, String subject, String content) {
// 创建一个邮件对象
SimpleMailMessage msg = new SimpleMailMessage();
msg.setFrom(from); // 设置发送发
msg.setTo(to); // 设置接收方
msg.setSubject(subject); // 设置邮件主题
msg.setText(content); // 设置邮件内容
// 发送邮件
System.out.println("123-----------");
mailSender.send(msg);
}
/**
* 发送带附件的邮件信息
*
* @param to 接收方
* @param subject 邮件主题
* @param content 邮件内容(发送内容)
* @param files 文件数组 // 可发送多个附件
*/
public void sendMessageCarryFiles(String to, String subject, String content, File[] files) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(from); // 设置发送发
helper.setTo(to); // 设置接收方
helper.setSubject(subject); // 设置邮件主题
helper.setText(content); // 设置邮件内容
if (files != null && files.length > 0) { // 添加附件(多个)
for (File file : files) {
helper.addAttachment(file.getName(), file);
}
}
} catch (MessagingException e) {
e.printStackTrace();
}
// 发送邮件
mailSender.send(mimeMessage);
}
/**
* 发送带附件的邮件信息
*
* @param to 接收方
* @param subject 邮件主题
* @param content 邮件内容(发送内容)
* @param file 单个文件
*/
public void sendMessageCarryFile(String to, String subject, String content, File file) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(from); // 设置发送发
helper.setTo(to); // 设置接收方
helper.setSubject(subject); // 设置邮件主题
helper.setText(content); // 设置邮件内容
helper.addAttachment(file.getName(), file); // 单个附件
} catch (MessagingException e) {
e.printStackTrace();
}
// 发送邮件
mailSender.send(mimeMessage);
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
}
三、在yml文件中添加配置(application.yml)
spring: #在spring下级
mail: # 邮件发送配置
host: smtp.qq.com #服务器地址
port: 587 #服务器的端口号
username: 576534286@qq.com # 发送方 邮箱账号
password: aldvjkngwmztbb # 邮箱 授权码(邮箱申请)
default-encoding: UTF-8 # 编码
properties:
mail:
smtp:
socketFactoryClass: javax.net.ssl.SSLSocketFactory
debug: true
from: wingline@foxmail.com # 发送方 第二邮箱
四、在测试类中测试(TestEmail)
注意:测试类要放在邮件工具类的同级目录下
package cn.com.fanjingxuan.util;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestEmail {
@Autowired
protected EmailUtil emailUtil;
@Test
public void testEmail(){// 设置接收者邮箱
String toCreator = "13373393281@163.com";
//设置邮件标题
String title = "邮箱登录验证码(A33智慧排班系统)";
for (int i = 0; i < 1; i++) {
//生成验证码
String num = VerificationCodeUtil.generateCheckCode1(20);
System.out.println(num);
//发送邮件
emailUtil.sendMessage(toCreator, title, num);
System.out.println("===============================================");
System.out.println("第 "+(i+1)+" 次发送成功!");
System.out.println("===============================================");
}
}
}
五:获取邮箱授权码
- 获取QQ邮箱授权码(QQ邮箱-设置-账户-POP3/SMTP服务开启,发送短信即可获取,记得保存好)
- 获取网易邮箱授权码(网易邮箱-设置-“POP3/SMTP/IMAP”-开启”(IMAP/SMTP服务)- 弹出“帐号安全验证” ,用手机扫码发送短信,并点击“我已发送”-验证后获取客户端授权密码)
电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行邮件传递,那就必须要遵守一定的规则,这个规则就是邮件传输协议。下面我们分别简单介绍几种协议:
什么是SMTP?
SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP认证要求必须提供账号和密码才能登陆服务器,其设计目的在于避免用户受到垃圾邮件的侵扰。
什么是IMAP?
IMAP全称为Internet Message Access Protocol(互联网邮件访问协议),IMAP允许从邮件服务器上获取邮件的信息、下载邮件等。IMAP与POP类似,都是一种邮件获取协议。
什么是POP3?
POP3全称为Post Office Protocol 3(邮局协议),POP3支持客户端远程管理服务器端的邮件。POP3常用于“离线”邮件处理,即允许客户端下载服务器邮件,然后服务器上的邮件将会被删除。目前很多POP3的邮件服务器只提供下载邮件功能,服务器本身并不删除邮件,这种属于改进版的POP3协议。
IMAP和POP3协议有什么不同呢?
两者最大的区别在于,IMAP允许双向通信,即在客户端的操作会反馈到服务器上,例如在客户端收取邮件、标记已读等操作,服务器会跟着同步这些操作。而对于POP协议虽然也允许客户端下载服务器邮件,但是在客户端的操作并不会同步到服务器上面的,例如在客户端收取或标记已读邮件,服务器不会同步这些操作。
邮件服务器:
用户要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。这些邮件服务器就类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。邮件服务器就好像是互联网世界的邮局。
按照功能划分,邮件服务器可以划分为两种类型:
- SMTP邮件服务器:用户替用户发送邮件和接收外面发送给本地用户的邮件。
- POP3/IMAP邮件服务器:用户帮助用户读取SMTP邮件服务器接收进来的邮件。