spring发送邮件及配置邮件笔记

本文介绍了如何在SpringBoot项目中使用spring-boot-starter-mail依赖配置QQ邮箱SMTP服务,包括设置邮件参数、处理附件和可能遇到的错误,如空附件URL导致的异常。同时,解释了邮件协议的区别,如SMTP、POP3和IMAP,以及Exchange的收发功能。
摘要由CSDN通过智能技术生成

引入依赖

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

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

配置

这里以qq为例:

spring:
  main:
    allow-bean-definition-overriding: true
  mail:
    host: smtp.qq.com
    port: 465
    protocol: smtps
    userName: 1111111@qq.com
    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代码肯定不能等这个反馈,所以不会报错。

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

邮件有哪些协议呢

常见的有smtp,pop3,imap,exchange等。
大家都听说过,但是不一定了解他们的区别。

smtp

smtp(simple mail transfer protocol)(简单邮件传输协议)是最常见的,他是发件协议。
smpt对应端口 25

收件协议

为什么要谈到收件协议呢?
因为邮件我们最常用的功能有2个,发送和接收。
发送就不说了,推些内容。接收也是很有用的,例如要采集些数据。

发件服务器和收件服务器不是一回事,是不同的,所有也要了解。

常见的有pop3,imap等。具体的区别不用太关心,知道他们是收件协议即可。
pop3 对应端口 110
imap 对应端口 143

当然,协议可以加密,及支持ssl。

exchange收发协议

exchange协议既可以收,也可以发。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值