SpringBoot发送邮件功能

460 阅读2分钟

第一部分(背景)

1.1 邮件的使用场景

  • 注册验证
  • 网站营销
  • 密码找回
  • 提醒、监控告警
  • 触发机制

1.2 邮件的发送原理

邮件传输协议:

  • SMTP协议(规定如何把邮件从一台服务器传输到另一台服务器)

  • Mime协议(增强了二进制文件传输功能)

  • POP3协议(规定了如何把邮件从邮件服务器中的下载到客户端)

  • IMAP协议(对POP协议的补充。即:客户端对邮件的操作,会反馈给邮件服务器)

发送邮件的流程图:

1.3 邮件的发送历史

1969年10月,世界第一份电子邮件。

1987年9月14日,中国第一封电子邮件。

1.4 SpringBoot介绍

  • 约定大于配置

  • 简单快速开发

  • 强大的生态链家族

第二部分(实践)

2.1 发送文本邮件

  • 引入jar依赖包
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
		</dependency>
  • 配置邮箱参数
spring.mail.host=smtp.163.com
spring.mail.port=25
spring.mail.username=***@163.com
spring.mail.password=***
spring.mail.default-encoding=UTF-8
  • 封装SimpleMailMessage
  • JavaMailSender
@Service
public class MailService {

    @Value("${spring.mail.username}")
    private String from;
    @Autowired
    private MailSender mailSender;

    /**
     * 发送方法
     * @param toUser
     * @param subject
     * @param content
     */
    public void sendSimpleMail(String toUser, String subject, String content){

        SimpleMailMessage message = new SimpleMailMessage();
        
        // 接收人
        message.setTo(toUser);
        // 发送主题
        message.setSubject(subject);
        // 发送内容
        message.setText(content);
        //  发送人
        message.setFrom(from);

        mailSender.send(message);
    }
}

2.2 发送HTML邮件

/**
     * 发送html邮件
     * @param toUser
     * @param subject
     * @param content
     */
    public void sendHTMLEmail(String toUser, String subject, String content) throws MessagingException {

        // 创建发送消息
        MimeMessage message = mailSender.createMimeMessage();
        // 创建发送消息Helper
        MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);

        messageHelper.setTo(toUser);
        messageHelper.setSubject(subject);
        messageHelper.setText(content, true);

        messageHelper.setFrom(from);

        // 发送
        mailSender.send(message);
    }

2.3 发送附件邮件

/**
     * 发送带附件的邮件
     * @param toUser
     * @param subject
     * @param content
     * @param filePath
     */
    public void sendAttachmentEmail(String toUser, String subject, String content, String filePath) throws MessagingException {

        MimeMessage message = mailSender.createMimeMessage();

        MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);

        messageHelper.setFrom(from);
        messageHelper.setTo(toUser);
        messageHelper.setSubject(subject);
        messageHelper.setText(content);

        // 获取附件文件
        FileSystemResource file = new FileSystemResource(filePath);
        // 获取文件名称
        String fileName = file.getFilename();
        // 添加文件
        messageHelper.addAttachment(fileName, file);

        mailSender.send(message);
    }

2.4 发送带图片邮件

/**
     * 发送邮件中包含图片
     * @param toUser
     * @param subject
     * @param content
     * @param rscPath
     * @param rscId
     * @throws MessagingException
     */
    public void sendInlineResourceEmail(String toUser, String subject, String content, String rscPath, String rscId) throws MessagingException {

        MimeMessage message = mailSender.createMimeMessage();

        MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);

        messageHelper.setFrom(from);
        messageHelper.setTo(toUser);
        messageHelper.setSubject(subject);
        messageHelper.setText(content, true);

        // 获取图片
        FileSystemResource res = new FileSystemResource(rscPath);
        // 添加图片和图片ID
        messageHelper.addInline(rscId, res);


        mailSender.send(message);
    }

2.5 邮件系统

2.6 常见错误码