文章目录
- 引入依赖
- 配置
- 代码
- 附件url地址为空会不会报错
- 接收方邮件地址错误会不会报错
引入依赖
推荐用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: [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代码肯定不能等这个反馈,所以不会报错。
但是如果地址错误,邮件的发送方会收到退回邮件。