本文介绍Spring+Java Mail发送邮件。
本文章默认已搭建好Spring框架,故只介绍Spring Email模块。
<!-- 引入java mail包 -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.0</version>
</dependency>
简要介绍
1.MailSender:Spring Email使用MailSender连接Email服务器实现邮件发送
2.**发件人必须和连接Email服务器账号一致**
配置MailSender为Spring bean:
@Configuration
@ComponentScan
@PropertySource("classpath:config.properties")
public class PiperBeanFactory {
@Value("${mail.smtp.host}")
private String smtpHost;
@Value("${mail.smtp.port}")
private int smtpPort;
@Value("${mail.username}")
private String mailUserName;
@Value("${mail.password}")
private String mailPass;
@Value("${mail.security}")
private boolean security;
@Bean
public JavaMailSender getJavaMailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); //MailSender实现类
mailSender.setHost(smtpHost); //主机
mailSender.setPort(smtpPort); //端口
mailSender.setUsername(mailUserName); //账号
mailSender.setPassword(mailPass); //密码
if (security) {
Properties props = new Properties();
props.put("mail.smtps.auth", "true"); //是否需要身份认证
props.put("mail.smtp.ssl.enable", "true"); //采用ssl加密
props.put("mail.transport.protocol", "smtps"); //协议
mailSender.setJavaMailProperties(props);
}
return mailSender;
}
}
config.properties:
mail.username=58257045@qq.com
mail.password=egupdmxgztilbfah
mail.smtp.host=smtp.qq.com
mail.smtp.port=465
mail.security=true
创建简单文本Email(SimpleMailMessage):
public static SimpleMailMessage createSimpleMessage(){
// 建立邮件消息
SimpleMailMessage mailMessage = new SimpleMailMessage();
// 设置收件人,寄件人 用数组发送多个邮件
// String[] array = new String[] {"sun111@163.com","sun222@sohu.com"};
// mailMessage.setTo(array);
mailMessage.setTo("xxx@qq.com");
mailMessage.setFrom("xxx@qq.com");
mailMessage.setSubject(" 测试简单文本邮件发送! ");
mailMessage.setText(" 测试我的简单邮件发送机制!! ");
return mailMessage;
}
创建带复杂Email(MimeMessage):
由于javax.mail.internet.MimeMessage的API过于笨重,Spring提供MimeMessageHelper组装Email消息
public MimeMessage createMixedMessage(JavaMailSender javaMailSender) throws MessagingException {
// 建立邮件消息,发送简单邮件和html邮件的区别
MimeMessage mailMessage = javaMailSender.createMimeMessage();
// true代表采用multipart模式
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,
true);
// 设置收件人,寄件人
messageHelper.setTo("582547045@qq.com");
messageHelper.setFrom("582547045@qq.com");
messageHelper.setSubject("复杂邮件,带嵌套图片和附件");
// true 表示启动HTML格式的邮件
messageHelper.setText(
"<html><head></head><body><h1>hello!</h1>"
+ "<img src=\"cid:a\"/></body></html>", true);
FileSystemResource img = new FileSystemResource(new File("xxx"));
messageHelper.addInline("a", img);//使用addInline添加嵌套图片(第一个参数需要和cid指定的名称一致)
messageHelper.addAttachment("xxx.jpg", img);//添加附件
return mailMessage;
}
测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = PiperBeanFactory.class)
public class MailTest {
@Autowired
private JavaMailSender javaMailSender;
@Test
public void sendHtmlMail() throws MessagingException {
SimpleMailMessage simpleMailMessage = createSimpleMessage();
MimeMessage mimeMessage = createMixedMessage(javaMailSender);
javaMailSender.send(simpleMailMessage);
javaMailSender.send(mimeMessage);
}
}