转载来源:https://blog.youkuaiyun.com/weixin_47390965/article/details/124015311
作者:UnIQUE Eason
邮件发送是一个非常常见的功能,注册时的身份认证、重要通知发送等都会用到邮件发送。Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐,Spring中提供了JavaMailSender用来简化邮件配置,Spring Boot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。下面就来看看Spring Boot中如何发送邮件。
发送前的准备
以QQ邮箱为例,首先要申请开通POP3/SMTP服务或者IMAP/SMTP服务。SMTP全称为Simple MailTransfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与SMTP服务器之间,以及SMTP服务器与SMTP服务器之间的通信规则。
一、登录QQ邮箱,依次点击设置和设置下的账户
二、在账户下方找到POP3/SMTP服务,点击“开启”按钮
三、点击开启后,可以看到发送短信验证的提示,发送成功后就可以获取到授权码,将授权码保存,后面会要用到
获取到授权码后,准备工作就完成了
发送邮件
使用SpringBoot发送邮件,首先要添加邮件依赖:
<!--添加邮件依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
然后配置application.yml文件:
spring:
mail:
host: smtp.qq.com #邮件服务器地址
port: 465 #端口号
username: QQ邮箱地址
password: 上面获取的授权码
default-encoding: UTF-8 #默认编码格式
properties:
mail:
debug: true #启动debug调试
smtp:
socketFactory:
class: javax.net.ssl.SSLSocketFactory #SSL连接配置
服务器地址和端口是可以在邮件的帮助中心看到的(QQ邮箱=>帮助中心=>搜索SSL)如下:
接下来就可以发送邮件了,先创建一个MyMailService用来封装邮件发送:
@Component
public class MyMailService {
@Autowired
JavaMailSender javaMailSender;
public void sendMail(String from,String to,String cc,String subject,String text){
SimpleMailMessage smm = new SimpleMailMessage();
smm.setFrom(from);//发送者
smm.setTo(to);//收件人
smm.setCc(cc);//抄送人
smm.setSubject(subject);//邮件主题
smm.setText(text);//邮件内容
javaMailSender.send(smm);//发送邮件
}
}
- JavaMailSender是Spring Boot在MailSenderPropertiesConfiguration类中配置好的,该类在Mail自动配置类MailSenderAutoConfiguration中导入,因此这里注入JavaMailSender就可以使用了
- 传递的5个参数分别表示邮件发送者、收件人、抄送人、邮件主题以及邮件内容
- 简单邮件可以直接构建一个SimpleMailMessage对象进行配置,配置完成后,通过JavaMailSender将邮件发送出去
使用测试类给自己发邮件测试一下:
@SpringBootTest
public class MyMailServiceTest {
@Autowired
MyMailService myMailService;
@Test
public void sendMailTest(){
myMailService.sendMail(
"1196302555@qq.com",
"1196302555@qq.com",
"1196302555@qq.com",
"SpringBoot发送邮件",
"邮件发送成功啦!");
}
}
执行方法后可以看到邮件发送成功了,以上代码可以写自己的邮件
发送带附件的邮件
要发送一个带附件的邮件也非常容易,通过调用Attachment方法即可添加附件,在MailService中添加如下方法:
public void sendFileMail(String from, String to, String subject, String text, File file){
try {
MimeMessage mm = javaMailSender.createMimeMessage();
MimeMessageHelper mmh = new MimeMessageHelper(mm,true);
mmh.setFrom(from);
mmh.setTo(to);
mmh.setSubject(subject);
mmh.setText(text);
mmh.addAttachment(file.getName(), file);
}catch (Exception e){
e.printStackTrace();
}
}
这里使用MimeMessageHelper简化了邮件配置,它的构造方法的第二个参数true表示构造一个multipart message类型的邮件。最后通过addAttachment方法添加附件
测试一下:
@Test
public void sendFileMailTest(){
myMailService.sendFileMail("1196302555@qq.com","1196302555@qq.com","发送带附件的邮件","邮件发送成功啦!",new File("E:\\test.docx"));
}
可以看到,邮件发送成功,附件也接收到了
至此,使用SpringBoot实现邮件发送就完成了