SpringBoot提供了开箱即用的邮件发送starter,通过简单的配置,就可以发送邮件。参考如下。
直接用starter的弊端
开箱即用的starter
,需要把邮箱配置等信息,都配置在配置文件中,如果需要更改邮箱信息,则需要重新配置,编译打包。比较麻烦,一个灵活的系统,一般都是从把邮箱信息配置在数据库中,甚至可以配置多个邮箱。
执行邮件发送业务的时候,从数据库中读取,邮箱信息,邮件模板等等数据。来进行发送。
灵活的发送邮件
本质上还是使用spring-boot-starter-mail
提供的邮件发送api来完成功能
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
发送方法的实现
import java.nio.file.Paths;
import java.io.UnsupportedEncodingException;
import java.nio.file.Files;
import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
public class EmailHelper {
public static void main(String[] args) throws UnsupportedEncodingException, MessagingException {
sendTest();
}
public static void sendTest() throws MessagingException, UnsupportedEncodingException {
JavaMailSenderImpl javaMailSenderImpl = new JavaMailSenderImpl();
javaMailSenderImpl.setDefaultEncoding("utf-8");
javaMailSenderImpl.setHost("smtp.exmail.qq.com"); // 邮箱服务器主机
javaMailSenderImpl.setPort(465); // 端口
javaMailSenderImpl.setUsername("no-reply@springboot.io"); // 登录账户
javaMailSenderImpl.setPassword("123456789"); // 登录密码
javaMailSenderImpl.setProtocol("smtps"); // 协议
Properties properties = new Properties();
properties.put("mail.smtp.auth", "true"); // 配置项
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.starttls.required", "true");
javaMailSenderImpl.setJavaMailProperties(properties);
// 创建邮件消息
MimeMessage message = javaMailSenderImpl.createMimeMessage();
// 通过Helper 设置邮件消息内容
MimeMessageHelper helper = new MimeMessageHelper(message, true);
// 基本信息
helper.setFrom("no-reply@springboot.io", "SpringBoot中文社区"); // 设置发件人与别名
helper.setTo("747692844@qq.com"); // 收件人
helper.setSubject("你好,这是测试邮件"); // 主题
// 邮件文本内容,通过boolean参数指定内容是否是HTML
helper.setText("<h3>Hello SpringBoot</h3>", true);
// 邮件附件,指定附件名称,流,ContentType
helper.addAttachment("logo.png", () -> Files.newInputStream(Paths.get("D:\\logo.png")), "image/png");
// 发送邮件
javaMailSenderImpl.send(message);
}
}
收到邮件
别名,内容,附件都没有问题