话不多说直接上代码
//结合springboot导入依赖:
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
在springboot中application.properties添加邮件需要的依赖
# JavaMailSender 邮件发送的配置
spring.mail.host=stmp的地址
spring.mail.username=发送人邮箱
spring.mail.password=发送人(授权码)
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.default-encoding=UTF-8
如何正文的内容为html格式的话需要将(enable,required换成false)
下面上发送的代码
这里将发送邮件的参数封装一个实体类中了
public class Mail {
@ApiModelProperty(value = "收件人邮箱")
private String receiver;
@ApiModelProperty(value = "邮箱标题")
private String title;
@ApiModelProperty(value = "邮箱正文")
private String text;
@ApiModelProperty(value = "邮箱附件的路径")
private String filePath;
public String getReceiver() {
return receiver;
}
public void setReceiver(String receiver) {
this.receiver = receiver;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
}
@RestController
public class test {
@Autowired
private MailServices mailService;
@PostMapping("/send")
public void mail(Mail mail) {
mailService.sendMail(mail);
}
public interface MailServices {
/**
* 发送邮箱
* @param mail
*/
void sendMail(Mail mail);
}
@Component
public class mailServicesImpl implements MailServices {
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String from;
private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(MailServices.class);
@Override
public void sendMail(Mail mail) {
MimeMessage message = mailSender.createMimeMessage();
System.getProperties().setProperty("mail.mime.splitlongparameters", "false");// 他的意义在于你附件名过长导致发送后的附件名更改陈其他格式文件
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);// 发送人
helper.setText(mail.getText(), true);// 正文的格式,后面添加true时候为html文本,什么也不写默认为text文本
FileSystemResource file = new FileSystemResource(new File(mail.getFilePath()));
String fileName = file.getFilename();
helper.addAttachment(fileName, file);
mailSender.send(message);
} catch (MessagingException e) {
LOG.info("发邮件失败");
}
}
}
如上面代码所写看看加与不加(System.getProperties().setProperty(“mail.mime.splitlongparameters”, “false”);)这段代码发送的区别:
文件的名字与格式都改变了,这个地方真是很大的坑后来在网上找说把这段代码(System.getProperties().setProperty(“mail.mime.splitlongparameters”, “false”);)放到启动类上就好了,然而真的不起作用。然后让我们看看为何会这样
我们接着看这个方法
这个代表的附件的名字都放到这里来让我们跟一下代码
看这里当你的附件名base64编码大于60还有其他两个条件进行截取
此时看这里这个参数默认为true,所以为何我们加上那个代码大家就清楚了吧。
如果正文的内容html格式的话你如何使用呢
上面的代码已经说了,但是为什么为true的时候可以解析html格式的信息呢??
当你的接收人是多个的话如何操作呢?
public void setTo(String to) throws MessagingException {
Assert.notNull(to, "To address must not be null");
setTo(parseAddress(to));
}
public void setTo(String[] to) throws MessagingException {
Assert.notNull(to, "To address array must not be null");
InternetAddress[] addresses = new InternetAddress[to.length];
for (int i = 0; i < to.length; i++) {
addresses[i] = parseAddress(to[i]);
}
setTo(addresses);
}
大家看当你需要发多个邮件时候,你的将你的字符串一","分割成数组形式然后传入,因为setTo是既支持当个收件人,还有多个收件人,希望大家多多点点底层对的实现方式,我开发的时候很好看到这些,而且多个抄送人也是一样的。
相信大家看到这里就明朗的许多了吧!!!希望能帮助大家!!!