当前位置:   article > 正文

SpringBoot整合javaMail使用笔记_springboot javamail

springboot javamail

1. 什么是javaMail

1.1. 概述

JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。JavaMail是由Sun定义的一套收发电子邮件的API,它可以方便地执行一些常用的邮件传输,不同的厂商可以提供自己的实现类。但它并没有包含在JDK中,而是作为JavaEE的一部分。
厂商所提供的JavaMail服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括:

  • SMTP:单间邮件传输协议,用于发送电子邮件的传输协议
  • POP3:用于接受电子邮件的标准协议
  • IMAP:互联网消息协议,是POP3的替代协议

这三种协议都有对应SSL加密传输协议,分别是SMTPS,POP3S和IMAPS。除JavaMail服务提供程序之外,JavaMail还需要JAF(JavaBeans Activation Framework)来处理不是纯文本的邮件内容,这包括MIME(多用途互联网邮件扩张)、URL页面和文件附件等内容。

1.2. 相关类

1.2.1. Properties属性对象

由于JavaMail需要和邮件服务器进行通信,这就要求程序提供许多注入服务器地址、端口、用户名、密码等信息,JavaMail通过Properties对象封装这些属性对象
在这里插入图片描述

1.2.2. Session会话对象

Session是一个很容易被误解的类,这归咎于混淆视听的类名。千万不要以为这里的Session像HttpSession一样代表真实的交互会话,但创建Session对象时,并没有对应的物理连接,它只不过是一对配置信息的集合。

Session的主要作用,包括两方面:

  • 接受各种配置属性信息:通过Properties对象设置的属性信息
  • 初始化JavaMail环境:根据JavaMail的配置文件,初始化JavaMail环境,以便通过Session对象创建其他重要类的实例。

1.2.3. Transport和Store传输

邮件操作只有发送或接受两种处理方式,JavaMail将这两种操作描述为传输(javax.mail.Transport)和存储(javax.mail.Store),传输对应邮件的发送,而存储对应邮件的接口。

1.2.4. Message消息对象

一旦获得Session对象,就可以继续创建要发送的消息。这由Message类来完成。因为Message是个抽象类,您必须用一个子类,多数情况为javax.mail.internet.MimeMessage。MimeMessage是个能理解MIME类型和头的电子邮件消息。

1.2.5. Address地址

一旦你创建了Session和Message,并将内容填入消息后,就可以用Address确定信件地址了。和Messege一样,Address也是个抽象类。你用的是javax.mail.internet.InternetAddress类。

1.2.6. Authenticator认证者

与java类一样,JavaMail API也可以利用Authenticator通过用户名和密码访问受保护的资源。对于含电子邮件地址,只要传递电子邮件地址到构造器就行了。与java类一样,JavaMail API也可以利用Authenticator通过用户名和密码访问受保护的资源。对于JavaMail API来说,这些资源就是邮件服务器。JavaMail Authenticator在javax.mail包中,而且它和java.net中同名的类Authenticator不同。两者并不共享同一个Tuthenticator,因为JavaMail API用于Java 1.1,它没有java.net类别。要使用Authenticator,先创建一个抽象类的子类,并从getPasswordAuthentication()方法中返回PasswordAuthentication 实例。创建完成后,您必需向session注册 Authenticator。然后,在需要认证的时候,就会通知Authenticator。您可以弹出窗口,也可以从配置文件中(虽然没有加密是不安全的)读取用户名和密码,将它们作为PasswordAuthentication对象返回给调用程序。

2. 使用javaMail

2.1. 导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
  • 1
  • 2
  • 3
  • 4

2.2. 配置文件 - yml格式

spring:
  mail:
    host: smtp.163.com
    port: 465
    username: xxxxxxxxxxx@163.com
    password: 不是邮箱密码 授权码
    protocol: smtps
    properties:
      mail:
        debug: true
        smtp:
          from: xxxxxxxx@163.com #默认发送者邮箱
          ssl:
            enabled: true
            socketFactory:
              fallback: false
              class: javax.net.ssl.SSLSocketFactory
          auth: true
          starttls:
            enabled: true
            required: true
    default-encoding: utf-8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2.3. 代码示例

2.3.1. 发送简单邮件

    @Autowired
    private JavaMailSender javaMailSender;
    @Value("${spring.mail.username}")
    private String from;
    /**
     * 发送纯文本邮件.
     *
     * @param to      目标email 地址
     * @param subject 邮件主题
     * @param text    纯文本内容
     */
    public void sendMail(String to, String subject, String text) {
        SimpleMailMessage message = new SimpleMailMessage();
        //如有配置 可不填
        message.setFrom(from);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(text);
        javaMailSender.send(message);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

2.3.2. 发送附件邮件

    @Autowired
    private JavaMailSender javaMailSender;
    @Value("${spring.mail.username}")
    private String from;
	/**
     * 发送附件邮件.
     *
     * @param to       目标email 地址
     * @param subject  邮件主题
     * @param text     纯文本内容
     * @param filePath 附件的路径 当然你可以改写传入文件
     */
    public void sendAttachMail(String to, String subject, String text, String filePath) throws javax.mail.MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true, StandardCharsets.UTF_8.name());
        helper.setTo(to);
        helper.setFrom(from);
        helper.setSubject(subject);
        //是否以html格式解析
        helper.setText(text, true);
        Path path = Paths.get(filePath);
        if(Files.exists(path)){
            helper.addAttachment(path.getFileName().toString(),new FileSystemResource(path.toFile()));
        }
        javaMailSender.send(mimeMessage);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/95398
推荐阅读
相关标签
  

闽ICP备14008679号