1. 引入依赖
org.springframework.boot
spring-boot-starter-mail
2. 邮箱实体类
package com.mg.ecio.hlink.dto.ows.beans;
import lombok.Data;
import java.io.File;
@Data
public class Email {
private String senderAccount;
private String senderName;
private String password;
private String host;
private String port;
private String receiver;
private String htmlText;
private String subject;
private File file;
private String base64Content;
}
3. 邮箱工具类
//声明一个Message对象(代表一封邮件),从session中创建
private static MimeMessage getMimeMessage(JavaMailSenderImpl javaMailSender,Email email) throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
//发件人
mimeMessageHelper.setFrom(email.getSenderAccount());
//收件人 : 可以发送给多个收件人,该方法有一个重载的 数组形参
mimeMessageHelper.setTo(email.getReceiver());
// mimeMessage.setContent();
//邮件主题
mimeMessageHelper.setSubject(email.getSubject());
//邮件内容,这里的htmlText如果为空,一定是"",不能为null,要不然会报Text must be not null.的错误
// mimeMessageHelper.setText(email.getHtmlText(), true);
// 正确的写法,为了避免text为null
mimeMessageHelper.setText(StringTools.isEmpty(email.getHtmlText()) ? "" : email.getHtmlText(), true);
// 避免文件不存在
if(null != email.getFile() && email.getFile().exists()){
mimeMessageHelper.addAttachment(email.getFile().getName(), email.getFile());
}
return mimeMessage;
}
public static void sendMail(Email email){
try{
//1、创建邮件对象
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
//2、发邮件人邮箱
javaMailSender.setUsername(email.getSenderAccount());
//3、发邮件人邮箱密码(默认使用客户端的授权码)
javaMailSender.setPassword(email.getPassword());
//4、设置邮件服务器主机名 SMTP服务器地址
javaMailSender.setHost(email.getHost());
//5、SMTP服务器: 默认端口
javaMailSender.setPort(Integer.parseInt(email.getPort()));
//6、//发送邮件协议名称
javaMailSender.setProtocol("smtp");
//7、编码格式
javaMailSender.setDefaultEncoding("UTF-8");
//8、创建连接对象,连接到邮箱服务器
Properties mailProperties = new Properties();
//发送服务器需要身份验证,要采用指定用户名密码的方式去认证
mailProperties.put("mail.smtp.auth", true);
mailProperties.put("mail.smtp.starttls.enable", true);
//9、添加连接对象到邮件对象中
javaMailSender.setJavaMailProperties(mailProperties);
int count = 1;
//10、创建
//可以发送几封邮件:可以这里 for循环多次
MimeMessage mimeMessage = getMimeMessage(javaMailSender,email);
//11、发送邮件
javaMailSender.send(mimeMessage);
logger.info("发送 第"+ count + "封邮件" );
count ++;
logger.info("发往 "+email.getReceiver()+" 邮件发送成功");
} catch (MessagingException e) {
logger.error("发往 "+email.getReceiver()+" 邮件发送异常", e);
}
}
4. 测试
public static void main(String[] args) {
System.out.println(DateTimeUtil.getSysDate());
File file =new File("文件地址");
String htmlText = EmailUtils.gethtml();
Email email = new Email();
email.setSenderAccount("发送方账号");
email.setPassword("发送方密码");
email.setReceiver("接收方");
email.setHtmlText(null);
email.setFile(file);
email.setHost("smtp.office365.com");
email.setPort("587");
email.setSubject("111111111");
MailUtils.sendMail(email);
System.out.println(DateTimeUtil.getSysDate());
}
5. 各邮箱的Host及Port
Outlook
Host:smtp.office365.com
Port:587
网易163
Host:smtp.163.com
Port:465或587
qq
Host:smtp.qq.com
Port:465或587
注:除Outlook之外的邮箱都需要拿到授权码作为密码