spring发送邮件笔记

文章目录

      • 引入依赖
      • 配置
      • 代码
      • 附件url地址为空会不会报错
      • 接收方邮件地址错误会不会报错

引入依赖

推荐用spring集成依赖,不用一个包一个包找了。

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-mailartifactId>
dependency>

配置

这里以qq为例:

spring:
  main:
    allow-bean-definition-overriding: true
  mail:
    host: smtp.qq.com
    port: 465
    protocol: smtps
    userName: [email protected]
    passWord: eyywqbcdfddd
    properties:
      mail:
        smtp:
          auth: false
          starttls:
            enable: false
            required: false

注:userName是发送方邮件地址,用自己的qq号就行。
password是授权码,这个要在qq邮箱开通下。

如果启动报错:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

那么记得加这个配置(大意是解决类再次加载的问题):

spring:
  main:
    allow-bean-definition-overriding: true

代码

javax.mail.internet.MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = null;
helper = new MimeMessageHelper(mimeMessage, true);
URL url = new URL(request.getAttachmentUrl());
DataSource dataSource = new URLDataSource(url); // 附件地址为空会报错 MalformedURLException
helper.addAttachment(request.getAttachmentName(), dataSource); // 附件名为空不报错,会有个默认附件名
helper.setFrom(request.getFrom()); // 发送人
helper.setTo(request.getTo()); // 接收人
helper.setSubject(request.getSubject()); // 主题
helper.setText(request.getText(), true); // 正文
log.info("rest发送邮件开始"); // 这里无法toJson,会报错
mailSender.send(mimeMessage); // 不报错就是成功
log.info("rest发送邮件完成");

因为涉及到参数接收,最好弄个实体类,代码更整洁。实际mail有很多参数,但是常规来说,这些也够用了。

@Data
public class MailEntity{
private String subject;
private String from;
private String to;
private String text;
private String attachmentUrl;
private String attachmentName;
}

附件url地址为空会不会报错

会的,会报错MalformedURLException,这个在发送前的入参检查时就会报错。

接收方邮件地址错误会不会报错

不会,因为邮件是异步的,代码里的发送是发到邮件服务器,邮件服务器后续会发送给接收方,java代码肯定不能等这个反馈,所以不会报错。

但是如果地址错误,邮件的发送方会收到退回邮件。

你可能感兴趣的:(spring,笔记,java)