SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件

在Spring中提供了非常好用的 JavaMailSender接口实现邮件发送,在SpringBoot的Starter模块中也为此提供了自动化配置。

项目源码已托管在Gitee-SpringBoot_Guide

几个名词解释

  • 什么是POP3、SMTP和IMAP?

    详细介绍-请移步至网易帮助文档

  • IMAP和POP3有什么区别?

    详细介绍-请移步至网易帮助文档

  • 什么是免费邮箱客户端授权码功能?

    详细介绍-请移步至网易帮助文档

Spring Boot中发送邮件步骤

Spring Boot中发送邮件具体的使用步骤如下

  • 1、添加Starter模块依赖
  • 2、添加Spring Boot配置(QQ/网易系/Gmail)
  • 3、调用JavaMailSender接口发送邮件

添加Starter模块依赖


    org.springframework.boot
    spring-boot-starter-mail

添加Spring Boot配置

application.yml中添加邮件相关的配置,这里分别罗列几个常用邮件的配置比如QQ邮箱、网易系邮箱、Gmail邮箱。

QQ邮箱配置

官方配置说明:参考官方帮助中心

获取客户端授权码:参考官方帮助中心

详细的配置如下:

spring:
  mail:
    host: smtp.qq.com #发送邮件服务器
    username: [email protected] #QQ邮箱
    password: xxxxxxxxxxx #客户端授权码
    protocol: smtp #发送邮件协议
    properties.mail.smtp.auth: true
    properties.mail.smtp.port: 465 #端口号465或587
    properties.mail.display.sendmail: Javen #可以任意
    properties.mail.display.sendname: Spring Boot Guide Email #可以任意
    properties.mail.smtp.starttls.enable: true
    properties.mail.smtp.starttls.required: true
    properties.mail.smtp.ssl.enable: true
    default-encoding: utf-8
    from: [email protected] #与上面的username保持一致

说明:开启SSL时使用587端口时无法连接QQ邮件服务器

网易系(126/163/yeah)邮箱配置

网易邮箱客户端授码:参考官方帮助中心

客户端端口配置说明:参考官方帮助中心

详细的配置如下:

spring:
  mail:
    host: smtp.126.com
    username: [email protected]
    password: xxxxxxxx
    protocol: smtp
    properties.mail.smtp.auth: true
    properties.mail.smtp.port: 994 #465或者994
    properties.mail.display.sendmail: Javen
    properties.mail.display.sendname: Spring Boot Guide Email
    properties.mail.smtp.starttls.enable: true
    properties.mail.smtp.starttls.required: true
    properties.mail.smtp.ssl.enable: true
    default-encoding: utf-8
    from: [email protected]

特别说明:

  • 126邮箱SMTP服务器地址:smtp.126.com,端口号:465或者994
  • 163邮箱SMTP服务器地址:smtp.163.com,端口号:465或者994
  • yeah邮箱SMTP服务器地址:smtp.yeah.net,端口号:465或者994
Gmail邮箱配置

Gmail 客户端设置说明:参考官方Gmail帮助

以上链接需要自行搭梯子,这里截几张图参考下

SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件_第1张图片SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件_第2张图片SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件_第3张图片

总结: Gmail 发送邮件服务器为:smtp.gmail.com,端口号:465。客户端授权码为Gmail账号的密码,必须使用使用SSL。

还需要开启允许不够安全的应用 ,不然会出现Authentication failed的异常 选择登录与安全滑到底部有个允许不够安全的应用开启即可

详细的配置如下:

spring:
  mail:
    host: smtp.gmail.com
    username:[email protected]
    password: xxxxx #Gmail账号密码
    protocol: smtp
    properties.mail.smtp.auth: true
    properties.mail.smtp.port: 465
    properties.mail.display.sendmail: Javen
    properties.mail.display.sendname: Spring Boot Guide Email
    properties.mail.smtp.starttls.enable: true
    properties.mail.smtp.starttls.required: true
    properties.mail.smtp.ssl.enable: true
    from: [email protected]
    default-encoding: utf-8

调用JavaMailSender接口发送邮件

常用几种邮件形式接口的封装

import javax.mail.MessagingException;

public interface IMailService {
    /**
     * 发送文本邮件
     * @param to
     * @param subject
     * @param content
     */
    public void sendSimpleMail(String to, String subject, String content);

    public void sendSimpleMail(String to, String subject, String content, String... cc);

    /**
     * 发送HTML邮件
     * @param to
     * @param subject
     * @param content
     * @throws MessagingException
     */
    public void sendHtmlMail(String to, String subject, String content) throws MessagingException;

    public void sendHtmlMail(String to, String subject, String content, String... cc);

    /**
     * 发送带附件的邮件
     * @param to
     * @param subject
     * @param content
     * @param filePath
     * @throws MessagingException
     */
    public void sendAttachmentsMail(String to, String subject, String content, String filePath) throws MessagingException;

    public void sendAttachmentsMail(String to, String subject, String content, String filePath, String... cc);

    /**
     * 发送正文中有静态资源的邮件
     * @param to
     * @param subject
     * @param content
     * @param rscPath
     * @param rscId
     * @throws MessagingException
     */
    public void sendResourceMail(String to, String subject, String content, String rscPath, String rscId) throws MessagingException;

    public void sendResourceMail(String to, String subject, String content, String rscPath, String rscId, String... cc);

} 

再写一个组件实现上面的接口并注入JavaMailSender

@Component
public class IMailServiceImpl implements IMailService {
	@Autowired
    private JavaMailSender mailSender;
	@Value("${spring.mail.from}")
    private String from;
	//具体实现请继续向下阅读
}
发送文本邮件
 /**
     * 发送文本邮件
     * @param to
     * @param subject
     * @param content
     */
    @Override
    public void sendSimpleMail(String to, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(content);
        mailSender.send(message);
    }

    @Override
    public void sendSimpleMail(String to, String subject, String content, String... cc) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        message.setCc(cc);
        message.setSubject(subject);
        message.setText(content);
        mailSender.send(message);
    }
发送html邮件
 /**
     * 发送HTML邮件
     * @param to
     * @param subject
     * @param content
     */
    @Override
    public void sendHtmlMail(String to, String subject, String content) throws MessagingException {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(from);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(content, true);

        mailSender.send(message);
    }

省略实现带有抄送方法的实现

发送带附件的邮件
 /**
     * 发送带附件的邮件
     * @param to
     * @param subject
     * @param content
     * @param filePath
     */
    public void sendAttachmentsMail(String to, String subject, String content, String filePath) throws MessagingException {
        MimeMessage message = mailSender.createMimeMessage();

        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(from);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(content, true);

        FileSystemResource file = new FileSystemResource(new File(filePath));
        String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
        helper.addAttachment(fileName, file);

        mailSender.send(message);
    }

省略实现带有抄送方法的实现

发送正文中有静态资源的邮件
/**
     * 发送正文中有静态资源的邮件
     * @param to
     * @param subject
     * @param content
     * @param rscPath
     * @param rscId
     */
    public void sendResourceMail(String to, String subject, String content, String rscPath, String rscId) throws MessagingException {
        MimeMessage message = mailSender.createMimeMessage();

        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(from);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(content, true);

        FileSystemResource res = new FileSystemResource(new File(rscPath));
        helper.addInline(rscId, res);

        mailSender.send(message);
    }

省略实现带有抄送方法的实现

发送模板邮件

发送模板邮件使用的方法与发送HTML邮件的方法一致。只是发送邮件时使用到的模板引擎,这里使用的模板引擎为Thymeleaf


            org.springframework.boot
            spring-boot-starter-thymeleaf

模板HTML代码如下:




    
    IJPay让支付触手可及
    


欢迎使用 -By

如果对你有帮助,请任意打赏

如何使用请看测试中实现的代码。

测试

package com.javen.controller;

import com.javen.email.impl.IMailServiceImpl;
import com.javen.vo.JsonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

@RestController
@RequestMapping("email")
public class EmailController {

    @Autowired
    private IMailServiceImpl mailService;//注入发送邮件的各种实现方法
    @Autowired
    private TemplateEngine templateEngine;//注入模板引擎

    @RequestMapping
    public JsonResult index(){
        try {
            mailService.sendSimpleMail("[email protected]","SpringBoot Email","这是一封普通的SpringBoot测试邮件");
        }catch (Exception ex){
            ex.printStackTrace();
            return new JsonResult(-1,"邮件发送失败!!");
        }
        return new JsonResult();
    }

    @RequestMapping("/htmlEmail")
    public JsonResult htmlEmail(){
        try {
            mailService.sendHtmlMail(""[email protected]","IJPay让支付触手可及","\n"
                    + "	
\n" +"

欢迎使用IJPay -By Javen

\n" +" https://github.com/Javen205/IJPay" + " IJPay 让支付触手可及,欢迎Start支持项目发展:)
\n" + " 如果对你有帮助,请任意打赏
\n" + " \n" + "
\n" + ""); }catch (Exception ex){ ex.printStackTrace(); return new JsonResult(-1,"邮件发送失败!!"); } return new JsonResult(); } @RequestMapping("/attachmentsMail") public JsonResult attachmentsMail(){ try { String filePath = "/Users/Javen/Desktop/IJPay.png"; mailService.sendAttachmentsMail("[email protected]", "这是一封带附件的邮件", "邮件中有附件,请注意查收!", filePath); }catch (Exception ex){ ex.printStackTrace(); return new JsonResult(-1,"邮件发送失败!!"); } return new JsonResult(); } @RequestMapping("/resourceMail") public JsonResult resourceMail(){ try { String rscId = "IJPay"; String content = "这是有图片的邮件
"; String imgPath = "/Users/Javen/Desktop/IJPay.png"; mailService.sendResourceMail("[email protected]", "这邮件中含有图片", content, imgPath, rscId); }catch (Exception ex){ ex.printStackTrace(); return new JsonResult(-1,"邮件发送失败!!"); } return new JsonResult(); } @RequestMapping("/templateMail") public JsonResult templateMail(){ try { Context context = new Context(); context.setVariable("project", "IJPay"); context.setVariable("author", "Javen"); context.setVariable("url", "https://github.com/Javen205/IJPay"); String emailContent = templateEngine.process("emailTemp", context); mailService.sendHtmlMail("[email protected]", "这是模板邮件", emailContent); }catch (Exception ex){ ex.printStackTrace(); return new JsonResult(-1,"邮件发送失败!!"); } return new JsonResult(); } }

效果图

[SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件_第4张图片SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件_第5张图片SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件_第6张图片SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件_第7张图片SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件_第8张图片SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件_第9张图片

项目地址

项目源码已托管在Gitee-SpringBoot_Guide

使用 Spring Boot 发送邮件到这里就介绍完了。个人能力有限如有错误欢迎指正。你有更好的解决方案或者建议欢迎一起交流讨论,如有疑问欢迎留言。

参考资料

转载于:https://my.oschina.net/zyw205/blog/1918222

你可能感兴趣的:(SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件)