Springboot的spring-boot-starter-mail为使用邮件发送功能提供了自动化配置,只需要简单几步就可以完成邮件发送功能。
1、在pom.xml文件中导入 mail 相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2、在application.properties配置文件中添加邮件相关配置
spring.mail.host=smtp.qq.com //邮箱SMTP服务器,这里写发送者邮箱使用的SMTP服务器
spring.mail.port = 25 //端口号,注意:很多云服务商禁用25端口,如需使用,需申请开放此端口
spring.mail.username = 1192655570@qq.com //发送者的邮箱账号
spring.mail.password = abcabcabc //授权登录密码
spring.mail.default-encoding = utf-8 //编码
spring.mail.protocol = smtp //邮件使用的协议,常用的除SMTP外还有POP3
spring.mail.properties.mail.debug = true //是否启用调试模式(启用调试模式可打印客户端与服务器交互过程时一问一答的响应消息)
spring.mail.properties.mail.auth = true // 是否需要验证用户名密码
monitor.tousers = user1@qq.com ,user2@qq.com //邮件接收者邮箱,key和value都可以自定义,如有多个接收者邮箱,使用逗号分隔
一般免费的邮箱,如下列出的,他们的SMTP服务器就是在域名前加上smtp就行了.
smtp.qq.com
smtp.163.com
smtp.sina.com.cn
smtp.sohu.com
smtp.126.com
3、创建邮件发送工具类MailUtil
public class MailUtil {
static Logger log = LoggerFactory.getLogger(MailUtil .class);
public MailUtil () {
}
/**
* 发送简单邮件
* @param javaMailSender
* @param from 发送者
* @param users 接收者
* @param subject 主题
* @param content 内容
*/
public static void sendSimpleMail(JavaMailSender javaMailSender, String from, String[] users, String subject, String content) {
Runnable thread = () -> {
try {
log.info("邮件开始 - [发件人:" + from + "收件人:" + Arrays.toString(users) + ",标题:" + subject + ",内容:" + content + "]");
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(users);
message.setSubject(subject);
message.setText(content);
javaMailSender.send(message);
log.info("邮件结束");
} catch (Exception e) {
e.printStackTrace();
log.error("发送邮件错误", e);
}
};
thread.run();
}
/**
* 发送包含附件的邮件
* @param javaMailSender
* @param from 发送者
* @param users 接收者
* @param subject 主题
* @param content 内容
*/
public static void sendMailWithAttachments(JavaMailSender javaMailSender, String from, String[] users, String subject, String content,File file) {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = null;
try {
helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(from);
helper.setTo(users);
helper.setSubject(subject);
helper.setText(content);
helper.addAttachment(file.getName(), file);
} catch (MessagingException e) {
e.printStackTrace();
}
javaMailSender.send(mimeMessage);
}
}
4、业务代码使用邮件发送功能
@Service
public class MyService {
@Autowired
private JavaMailSender javaMailSender;
@Value("spring.mail.username")
private String from;
@Value("monitor.tousers")
private String tousers;
//发送简单邮件
public boolean testSendMail(String subject,String content) {
String[] users = tousers.split(",");
MailUtil.sendSimpleMail(javaMailSender,from,users,subject,content);
return true;
}
//发送带附件的邮件
public boolean testSendMailWithAttachments(String subject,String content) {
String[] users = tousers.split(",");
File file = new File("范冰冰.jpg");
MailUtil.sendMailWithAttachments(javaMailSender,from,users,subject,content,file);
return true;
}
//发送带静态资源(例如图片等)的邮件
public boolean testSendMailWithStaticResources(String subject){
String[] users = tousers.split(",");
File file = new File("范冰冰.jpg");
String content="<html><body>[外链图片转存失败(img-T6OE6dlw-1562061147052)(https://mp.youkuaiyun.com/%22cid:范冰冰/%22)]</body></html>";
MailUtil.sendMailWithAttachments(javaMailSender,from,users,subject,content,file);
return true;
}
}