Spring Boot 集成邮件服务 JavaMailSender

前言

电子邮件系统(Electronic mail system,E-mail)由用户代理MUA(Mail User Agent)以及邮件传输代理MTA(Mail Transfer Agent),和邮件投递代理MDA(Mail Delivery Agent)组成,MUA指用于收发Mail的程序,MTA指将来自MUA的信件转发给指定用户的程序,MDA就是将MTA接收的信件依照信件的流向(送到哪里)将该信件放置到本机账户下的邮件文件中(收件箱),当用户从 MUA 中发送一份邮件时,该邮件会被发送送到MTA,而后在一系列MTA中转发,直到它到达最终发送目标为止。

SMTP 协议

SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

POP3 协议

POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。但目前的 POP3 邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的 POP3 协议。SMTP 和 POP3 是最初的两个协议,随着邮件的不断发展后来又增加了两个协议:

IMAP 协议

IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。

Mime 协议

MIME的英文全称是"Multipurpose Internet Mail Extensions" 多功能Internet 邮件扩充服务,它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。MIME意为多目Internet邮件扩展,它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持之后,它的意义就更为显著了。它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。

1、QQ邮箱配置步骤,获取授权码

QQ邮箱->设置->账户->POP3/SMTP服务:开启服务后会获得QQ的授权码。注:需要开通POP3和IMAP服务。

2、pom.xml文件

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

3、application.properties配置文件

#系统邮箱配置
spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=系统邮箱
#授权码
spring.mail.password = 授权码
spring.mail.protocol = smtp
spring.mail.default-encoding = UTF-8
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.connectiontimeout = 15000
spring.mail.properties.mail.smtp.timeout = 25000
spring.mail.properties.mail.smtp.writetimeout = 15000

4、JavaMailSender

(Spring已经帮我们内置了JavaMailSender,可以直接在项目中引用)



/**
 * @ClassName: MailServiceImpl
 * @Author: liuyaolong
 * @Description: 发送邮件实现类
 */
@Service
public class MailServiceImpl  {

    @Autowired
    private JavaMailSender mailSender;
   
    private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);

    @Value("${spring.mail.username}")
    String EMAIL_FROM;

    
    public void sendSimpleMail() {

        SimpleMailMessage  message = new SimpleMailMessage();
        try {
                message.setTo("接收邮件地址");//多个地址可用String[]
                message.setCc("抄送邮件地址");//多个地址可用String[]
                message.setFrom(String.valueOf(new InternetAddress(EMAIL_FROM)));//发送邮件地址
                message.setSubject("邮件主题");
                message.setText("邮件正文内容");
        } catch (AddressException  e){
            logger.error("发送文本邮件异常,错误信息:{}",e.getMessage());
        }
        mailSender.send(message);
    }

    
    public void sendAttachmentsMail() {

        MimeMessage mimeMessage = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
                helper.setFrom(String.valueOf(new InternetAddress(EMAIL_FROM)));//发送邮件地址
                helper.setSubject("邮件主题");
                helper.setText("邮件正文内容");
                helper.setCc("抄送邮件地址");
                helper.addAttachment("附件名",new FileSystemResource("附件"));
                helper.setTo("接收邮件地址");

        } catch (MessagingException e){
            logger.error("发送附件邮件异常,错误信息:{}",e.getMessage());
        }
        mailSender.send(mimeMessage);
    }

   
    public void sendHtmlMail()  {
        MimeMessage mimeMessage = mailSender.createMimeMessage();

        try {
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
            helper.setTo("接收邮件地址");
            helper.setCc("抄送邮件地址");
            helper.setFrom(String.valueOf(new InternetAddress(EMAIL_FROM)));//发送邮件地址
            helper.setSubject("邮件主题");
            helper.setText("邮件正文内容");
        } catch (MessagingException  e){
            logger.error("发送富文本邮件异常,错误信息:{}",e.getMessage());
        }
        mailSender.send(mimeMessage);
    }


}
发布了45 篇原创文章 · 获赞 51 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/qq_40162735/article/details/103365100