今天有个业务需求,执行一个定时任务,往某个特定的邮箱发送邮件。简单总结一下,利用java如何发送邮件。
1. org.springframework.mail.javamail.JavaMailSenderImpl实现类,该类实现org.springframework.mail.javamail.JavaMailSender接口,用于邮件发送端的设置。
2. java.util.Properties类,该类的底层实现为Map,用户存储邮件相关的属性设置。
3. javax.mail.internet.MimeMessage类,用于具体邮件的编辑设置。
4. org.springframework.mail.javamail.MimeMessageHelper类,辅助MimeMessage用于具体邮件的编辑。
代码如下:
public void sendMailDemo(){
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
//设置发送邮箱
mailSender.setHost("mail.163.com");
//设置邮件编码方式
mailSender.setDefaultEncoding("UTF-8");
//设置邮箱的用户名和密码
mailSender.setUsername("xxx@163.com");
mailSender.setPassword("******");
//其它属性,利用Properties传递
Properties prop = new Properties();
//让发送服务器认证用户名和密码
prop.put("mail.smtp.auth", true);
prop.put("mail.smtp.timeout", 10000);
mailSender.setJavaMailProperties(prop);
//建立mailSender的具体的邮件
MimeMessage mailMessage = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage);
//设置邮件接收人
messageHelper.setTo("jack@163.com");
//设置邮件发送人
messageHelper.setFrom("rose@163.com");
//邮件主题
messageHelper.setSubject("邮件发送demo");
//设置邮件内容
String content="hello,jack,i am rose";
messageHelper.setText(content,true);
//开始发送
mailSender.send(mailMessage);
}
在上述代码中,具体邮件的设置有多种重载方法,
setTo可以接受String[]参数,发送给多个接收人。
setText源码如下:
public void setText(String text, boolean html) throws MessagingException {
Assert.notNull(text, "Text must not be null");
MimePart partToUse;
if (isMultipart()) {
partToUse = getMainPart();
}
else {
partToUse = this.mimeMessage;
}
if (html) {
setHtmlTextToMimePart(partToUse, text);
}
else {
setPlainTextToMimePart(partToUse, text);
}
}
即默认不采用html格式发送邮件