最近项目需要实现一个发送邮件功能,踩了一些坑,最终实现了。
在此写一下心得
开始做的时候一塌糊涂,觉得挺难的,但是做完之后发现其实简单的一批,接下来我就来写一下实现流程。
1、准备好拿来发送邮件的账号,发邮件的时候需要用到(这里拿网易126邮箱为例)。
好,点击开启后,发送验证短信就拿到了,这里已经完成了一大半了。
2、接下来去配置我们的后台。
2.1、pom.xml 引入 jar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.2 开始编写代码(我这里拿带附件的为例子、我这里配置的动态的,根据传入的发送人信息和收件人信息进行发送)
/**
* 带附件的邮件
* @param record 配置发件人授权码 等信息
* @param emailTo 收件人
* @param emailSubject 主题
* @param emailContent 内容
* @param uploadPDF uploadEXECL uploadCAD附件
*/
@Override
public int sendAttachmentsMail(String emailHost,String emailUsername,String emailPassword,String emailTo, String emailSubject, String emailContent,String uploadPDF,String uploadEXECL,String uploadCAD) {
//创建实例
JavaMailSenderImpl sender = new JavaMailSenderImpl();
//设置发送的服务器(这里的属性 qq和网易的不一样)qq:smtp.qq.com 网易:smtp.126.com
sender.setHost(emailHost);
//当前发送人邮箱(也就是自己)
sender.setUsername(emailUsername);
//授权码 (不是邮箱密码 是上面咱们的准备工作获取的那个码)
sender.setPassword(emailPassword);
//设置端口(这里用456、默认的25 在阿里云服务器上未开放,推荐我们设置456)
sender.setPort(456);
//然后设置456需要设置底下一些东西、之前这写我写到yml里,就是不清楚该怎么去修改。
Properties p = new Properties();
p.setProperty("mail.smtp.auth", "true");
p.setProperty("mail.smtp.ssl", "true");
p.setProperty("mail.smtp.socketFactory.port", "465");
p.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
p.setProperty("mail.smtp.starttls.enable", "true");
p.setProperty("mail.smtp.starttls.required", "true");
sender.setJavaMailProperties(p);
MimeMessage message = sender.createMimeMessage();
//解决-发送邮件时附件名太长会被截取掉或者中文乱码问题
System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
try {
//这里的utf-8解决 邮件 内容乱码
MimeMessageHelper helper = new MimeMessageHelper(message, true, "utf-8");
//当前发送人邮箱(也就是自己)
helper.setFrom(emailUsername);
//发送到的邮箱地址
helper.setTo(emailTo);
//邮件主题、标题
helper.setSubject(emailSubject);
//类容
helper.setText(emailContent, true);
//这里赋值的是附件及名称 attachmentsMailNameDispose
helper.addAttachment(attachmentsMailNameDispose(uploadPDF), file);
//多个这样创建
// helper.addAttachment(attachmentsMailNameDispose(uploadEXECL), file);
// helper.addAttachment(attachmentsMailNameDispose(uploadCAD), file);
sender.send(message);
//日志信息
logger.info("邮件已经发送。");
return 200;
} catch (MessagingException e) {
logger.error("发送邮件时发生异常!", e);
return 500;
}
}