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

























