SpringBoot 2.x 集成网易邮箱、QQ邮箱、Gmail邮箱发送邮件
在Spring中提供了非常好用的 JavaMailSender接口实现邮件发送,因此引入依赖和进行编写不同配置即可实现。
所需依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
一:网易邮箱配置
1.网易邮箱客户端授权码
2.客户端端口配置
可以使用465、994、25
25端口在阿里服务器上默认是禁用的,如需使用需要申请解封
3.详细配置
spring: mail: # 邮件服务地址 host: smtp.163.com # 端口 465/994/25 port: 465 # 编码格式 default-encoding: utf-8 # 用户名 username: xxxxxx@163.com # 协议 protocol: smtp # 客户端授权码 password: xxxxxx # 其它参数 properties: mail: smtp: auth: true # 如果是用 SSL 方式,需要配置如下属性 starttls: enable: true required: true ssl: enable: true # 显示名称可任意设置 display: sendmail: Souther sendname: Spring Boot Test Email
4.特别说明
- 163邮箱SMTP服务器地址:smtp.163.com,端口号:465或者994
- 126邮箱SMTP服务器地址:smtp.126.com,端口号:465或者994
- yeah邮箱SMTP服务器地址:smtp.yeah.net,端口号:465或者994
二:QQ邮箱配置
1.官方配置说明
2.获取客户端授权码
3.详细配置
spring: mail: # 邮件服务地址 host: smtp.qq.com # 端口 465/587 port: 465 # 编码格式 default-encoding: utf-8 # 用户名 username: xxxxxx@qq.com # 协议 protocol: smtp # 客户端授权码 password: xxxxxx # 其它参数 properties: mail: smtp: auth: true # 如果是用 SSL 方式,需要配置如下属性 starttls: enable: true required: true ssl: enable: true # 显示名称可任意设置 display: sendmail: Souther sendname: Spring Boot Test Email
4.特别说明
开启SSL时使用587端口时无法连接QQ邮件服务器
三:Gmail邮箱配置
1.客户端设置说明
2.客户端授权码说明
客户端授权码为Gmail账号的密码,必须使用使用SSL
3.详细配置
spring: mail: # 邮件服务地址 host: smtp.gmail.com # 端口 465 port: 465 # 编码格式 default-encoding: utf-8 # 用户名 username: xxxxxx@gmail.com # 协议 protocol: smtp # 客户端授权码(gmail账号的密码) password: xxxxxx # 其它参数 properties: mail: smtp: auth: true starttls: enable: true required: true # 这里必须开启ssl ssl: enable: true # 显示名称可任意设置 display: sendmail: Souther sendname: Spring Boot Test Email
四:通过JavaMailSender接口发送邮件
- MailSendDto
public class MailSendDto { private String to; private String subject; private String content; public String getTo() { return to; } public void setTo(String to) { this.to = to; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
2.MailService
/** * @description: 邮件服务Service * @author: Mr.Tang * @create: 2021/1/21 10:06 **/ public interface MailService { /** * 发送普通邮件 * * @param dto */ void sendSimpleMailMessge(MailSendDto dto); /** * 发送普通邮件 * * @param to * @param subject * @param content */ void sendSimpleMailMessge(String to, String subject, String content); /** * 发送 HTML 邮件 * * @param to 收件人 * @param subject 主题 * @param content 内容 */ void sendMimeMessge(String to, String subject, String content); /** * 发送带附件的邮件 * * @param to 收件人 * @param subject 主题 * @param content 内容 * @param filePath 附件路径 */ void sendMimeMessge(String to, String subject, String content, String filePath); /** * 发送带静态文件的邮件 * * @param to 收件人 * @param subject 主题 * @param content 内容 * @param rscIdMap 需要替换的静态文件 */ void sendMimeMessge(String to, String subject, String content, Map<String, String> rscIdMap); }
3.MailServiceImpl
@Service public class MailServiceImpl implements MailService { private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class); @Autowired private JavaMailSender mailSender; @Autowired MallSystemMapper systemMapper; @Value("${spring.mail.username}") private String sender; @Override public void sendSimpleMailMessge(MailSendDto dto) { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(sender); message.setTo(dto.getTo()); message.setSubject(dto.getSubject()); message.setText(dto.getContent()); try { mailSender.send(message); logger.info("send success................."); } catch (Exception e) { logger.error("发送简单邮件时发生异常!", e); } } @Override public void sendSimpleMailMessge(String to, String subject, String content) { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(sender); message.setTo(to); message.setSubject(subject); message.setText(content); try { mailSender.send(message); logger.info("send success................."); } catch (Exception e) { logger.error("发送简单邮件时发生异常!", e); } } @Override public void sendMimeMessge(String to, String subject, String content) { MimeMessage message = mailSender.createMimeMessage(); try { //true表示需要创建一个multipart message MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(sender); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true); mailSender.send(message); logger.info("send success................."); } catch (MessagingException e) { logger.error("发送MimeMessge时发生异常!", e); } } @Override public void sendMimeMessge(String to, String subject, String content, String filePath) { MimeMessage message = mailSender.createMimeMessage(); try { //true表示需要创建一个multipart message MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(sender); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true); FileSystemResource file = new FileSystemResource(new File(filePath)); String fileName = file.getFilename(); helper.addAttachment(fileName, file); mailSender.send(message); logger.info("send success................."); } catch (MessagingException e) { logger.error("发送带附件的MimeMessge时发生异常!", e); } } @Override public void sendMimeMessge(String to, String subject, String content, Map<String, String> rscIdMap) { MimeMessage message = mailSender.createMimeMessage(); try { //true表示需要创建一个multipart message MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(sender); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true); for (Map.Entry<String, String> entry : rscIdMap.entrySet()) { FileSystemResource file = new FileSystemResource(new File(entry.getValue())); helper.addInline(entry.getKey(), file); } mailSender.send(message); logger.info("send success................."); } catch (MessagingException e) { logger.error("发送带静态文件的MimeMessge时发生异常!", e); } } }
五:效果图
普通邮件
HTML邮件
带附件邮件
带静态文件邮件
到这就结束了
如有错误欢迎指正。你有更好的解决方案或者建议欢迎一起交流讨论,如有疑问欢迎留言。