1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > SpringBoot 配合126邮箱实现邮件发送功能

SpringBoot 配合126邮箱实现邮件发送功能

时间:2022-04-26 14:06:34

相关推荐

SpringBoot 配合126邮箱实现邮件发送功能

126邮箱邮件发送

授权码申请pom依赖邮件配置代码编写原始手工方式发送邮件Bean与配置自动装载发送纯文本的邮件发送包含HTML标签的邮件发送包含附件的邮件发送包含静态资源的文件测试

SpringBoot 提供了系统级别邮箱服务,只需要导入一个邮箱启动器然后进行配置就可以使用邮件发送

的功能了,简直太方便了。

实现功能期间也踩了一些坑,为了方便后来者快速接入,特意记录下来供有需要的人进行参考。

授权码申请

开启POP3/SMTP,然后按照步骤获取授权码

pom依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>

邮件配置

## 126邮箱配置# 指定默认MimeMessage的编码,默认为: UTF-8spring.mail.default-encoding=UTF-8spring.mail.host=spring.mail.username=你的126邮箱地址## 指定SMTP server登陆授权码spring.mail.password=授权码# 指定SMTP server使用的协议,默认为: smtpspring.mail.protocol=smtpspring.mail.port=465# 下面的四项是必须配置的,否则会因为验证不通过而无法连接上邮件服务器, 这里一定要注意是ssl不是其它的认证方式spring.mail.properties.mail.smtp.auth=truespring.mail.properties.mail.smtp.ssl.enable=truespring.mail.properties.mail.smtp.ssl.required=truespring.mail.properties.mail.smtp.socketFactoryClass=.ssl.SSLSocketFactory#spring.mail.properties.mail.smtp.starttls.enable=true#spring.mail.properties.mail.smtp.starttls.required=true# 表示开启debug模式,邮件发送过程的日志会在控制台打印出来,方便排查问题spring.mail.properties.mail.debug=true# 指定是否在启动时测试邮件服务器连接,默认为falsespring.mail.test-connection=false# 邮件接收者#spring.mail.to.user=panyongjie@spring.mail.to.user=771006587@

代码编写

原始手工方式发送邮件

这里提供一个手动的硬编码的方式发送邮件的代码示例是为了更好的理解自动读取配置发送邮件所需要的流程

/*** 通过手动配置邮件信息,发送邮件* */@Testpublic void sendEmailByManualConfig() throws MessagingException {String from = "你的126邮箱地址";String toUser = "771006587@";JavaMailSenderImpl mailSender = new JavaMailSenderImpl();// 邮箱服务器mailSender.setHost("");// 端口号mailSender.setPort(465); // 25 465 994// 发送邮件的邮箱地址mailSender.setUsername(from);// 这里要用登录授权码,不是你登录邮箱的密码mailSender.setPassword("登录授权码");// 设置属性, 下面各项缺一不可Properties pro = System.getProperties();// 打开调试开关pro.put("mail.debug", "true");pro.put("mail.smtp.auth", "true");pro.put("mail.smtp.ssl.enable", "true");pro.put("mail.smtp.socketFactory.class", ".ssl.SSLSocketFactory");mailSender.setJavaMailProperties(pro);// 默认编码方式mailSender.setDefaultEncoding("utf-8");// 协议类型mailSender.setProtocol("smtp");// 测试gongmailSender.testConnection();MimeMessage message = mailSender.createMimeMessage();try {MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(from); // 发送人helper.setTo(toUser); // 收件人helper.setSubject("使用JavaMailSenderImpl和MimeMessageHelper发送邮件"); // 标题helper.setText("这是我用Springboot自带的mail启动器给你发送的邮件,当前时间是: " + simpleDateFormat.format(new Date())); // 内容mailSender.send(message);System.out.println("邮件发送完毕!!!");} catch (Exception e) {e.printStackTrace();}}

首先先对全局配置加载,后面会用到这些全局配置

Bean与配置自动装载

import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.core.io.FileSystemResource;import org.springframework.mail.SimpleMailMessage;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.JavaMailSenderImpl;import org.springframework.mail.javamail.MimeMessageHelper;import javax.mail.MessagingException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeUtility;import java.io.File;import java.io.UnsupportedEncodingException;import java.util.Properties;/*** 邮箱测试** @author panyongjie* @date /12/28*/@SpringBootTestpublic class MallTest {/*** 自动注入的Bean*/@Autowiredprivate JavaMailSender mailSender;/*** 读取配置文件中的邮件发送者*/@Value("${spring.mail.username}")private String from;/*** 读取配置文件中的邮件接收者*/@Value("${spring.mail.to.user}")private String toUser;private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");}

发送纯文本的邮件

/*** 读取配置文件,自动转载邮件发送Bean,然后发送纯文本的邮件* */@Testpublic void sendSimpleMail() {SimpleMailMessage message = new SimpleMailMessage();message.setFrom(from);message.setTo(toUser);message.setSubject("使用JavaMailSender和SimpleMailMessage发送邮件");message.setText("这是我用Springboot自带的mail启动器给你发送的邮件,当前时间是: " + simpleDateFormat.format(new Date())); // 内容mailSender.send(message);}

发送包含HTML标签的邮件

/*** 发送包含HTML标签的邮件* */@Testpublic void sendHtmlMessage() {MimeMessage message;message = mailSender.createMimeMessage();try {MimeMessageHelper helper = new MimeMessageHelper(message, true);// 创建邮件发送者地址helper.setFrom(new InternetAddress(MimeUtility.encodeText("发送者") + "<" + from + ">"));// 创建邮件发送者地址helper.setTo(new InternetAddress(MimeUtility.encodeText("接收方") + "<" + toUser + ">"));//标题helper.setSubject("这是一份内容包含HTML标签的网页");String content = "<h1>中奖通知</h1>" +"<p style='color:red;'>恭喜你获得大乐透三等奖,点击此处<a><a>进行领奖</p>";//第二个参数指定发送的是HTML格式helper.setText(content, true);} catch (MessagingException | UnsupportedEncodingException e) {e.printStackTrace();}mailSender.send(message);}

发送包含附件的邮件

/*** 发送包含附件的邮件* */@Testpublic void sendAttachmentsMail() {MimeMessage message = null;try {message = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);// 创建邮件发送者地址helper.setFrom(new InternetAddress(MimeUtility.encodeText("发送者") + "<" + from + ">"));// 创建邮件发送者地址helper.setTo(new InternetAddress(MimeUtility.encodeText("接收方") + "<" + toUser + ">"));helper.setSubject("报销申请-报销明细在附件里");String content = "<h1>报销单</h1>" +"<p style='color:red;'>报销详情请下载附件进行查看</p>";//第二个参数指定发送的是HTML格式helper.setText(content, true);//添加附件helper.addAttachment("报销费用.png", new FileSystemResource(new File("src/main/resources/static/fee.png")));} catch (Exception e) {e.printStackTrace();}mailSender.send(message);}

发送包含静态资源的文件

/*** 发送包含静态资源的文件* 静态资源可以包含在HTML标签中进行展示,不用和附件一样需要下载或者预览才能看到内容* */@Testpublic void sendInlineMail() {MimeMessage message = null;try {message = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);// 创建邮件发送者地址helper.setFrom(new InternetAddress(MimeUtility.encodeText("发送者") + "<" + from + ">"));// 创建邮件发送者地址helper.setTo(new InternetAddress(MimeUtility.encodeText("接收方") + "<" + toUser + ">"));helper.setSubject("邮件里包含静态资源,请注意查收");//第二个参数指定发送的是HTML格式helper.setText("<html><body>带静态资源的邮件内容 图片:<img src='cid:fee'/></body></html>", true);FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/fee.png"));helper.addInline("fee", file);} catch (Exception e) {e.printStackTrace();}mailSender.send(message);}

测试

每一个测试用例都运行一遍,再去查看邮箱,可以看到各种样式的邮件都发送成功了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。