springboot中集成JavaMail发送邮件
最近学习了下阳光沙滩博客后端的代码。
在发送邮件的部分,使用的如下的组件:
<!--mail相关-->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
即使用了Sun 公司提供了 JavaMail 用来实现邮件发送,但是配置稍微有些烦琐。搜索了一番,发现SpringBoot中已经提供了 MailSenderAutoConfiguration对邮件的发送做了进一步简化。
记录如下:
引入starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
在application.yaml中简单配置
主要配置如下:
# 邮件发送
spring:
mail:
host: smtp.qq.com
port: 465
username: 370424110@qq.com
password: xxxxxxxxxxx
default-encoding: UTF-8
protocol: smtps
其中,password就是开启发送邮箱POP3/SMTP服务的授权验证码。
注入JavaMailSender
@Configuration
public class EmailSendUtils {
// JavaMailSender是 Spring Boot在 MailSenderPropertiesConfiguration 类中已配直好的
@Autowired
JavaMailSender javaMailSender;
//sendSimpleMail 方法的 5 个参数分别表示邮件发送者、收件人、抄送人、邮件主题以及邮件内容。
public void sendSimpleMail(String from,String to,String cc,String subject,String content){
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom(from);
simpleMailMessage.setBcc(cc);
simpleMailMessage.setTo(to);
simpleMailMessage.setSubject(subject);
simpleMailMessage.setText(content);
javaMailSender.send(simpleMailMessage);
}
}
测试邮件发送
@RunWith(SpringRunner.class)
@SpringBootTest
public class EmailSendUtilsTest {
@Autowired
EmailSendUtils emailSendUtils;
@Test
public void sendSimpleMail() {
emailSendUtils.sendSimpleMail(
"37011110@qq.com",
"it111111@163.com",
"it111111@163.com",
"你查收的注册验证码",
"你的注册验证码为:10000"
);
}
}
查看邮箱,内容如下:
发送附件和图片邮件
以上就完成了一份简单邮件的发送。 如果要发送附件、图片或html邮件也很简单。 代码如下:
// 发送附件
public void sendAttachFileMail(String from, String to, String subject, String content, File file){
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content);
helper.addAttachment(file.getName(),file);
javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
e.printStackTrace();
}
}
//发送附件或html
public void sendMailWithImg(String from,String to,String subject,String content,String[] srcPath,String[] resIds){
if (srcPath.length != resIds.length) {
System.out.println("发送失败");
return;
}try {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
// 发送html
helper.setText(content,true);
for (int i = 0; i < srcPath.length; i++) {
FileSystemResource res = new FileSystemResource(new File(srcPath[i]));
helper.addInline(resIds[i], res);
}
javaMailSender.send(message);
} catch (MessagingException e) {
System.out.println("发送失败");
}
}
其中的 helper.setText(content,true); 即设置内容中可以支持html