一、pom.xml
<dependencies>
<!-- springboot的所需要的包配置 -->
<!-- 关键 springboot集成email发送依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
</dependencies>
二、配置yml文件(这一步仅是为了能使email这个包生效,发送的邮箱可以根据下面的实现方法自行调整)
1、QQ邮箱配置(支持SSL安全发送):
#邮箱配置
spring:
mail:
default-encoding: UTF-8
host: smtp.qq.com
username: 邮箱
password: 授权码
# 端口号465或587,但是经过我的测试,发现只有587能用
port: 587
# 使用SSL方式
properties:
mail:
smtp:
socketFactory:
class: javax.net.ssl.SSLSocketFactory
2、163邮箱配置(支持SSL安全发送):
spring:
mail:
default-encoding: UTF-8
host: smtp.163.com
username: 邮箱
password: 授权码
# 端口号465或944,但是经过我的测试,发现两个都能用
port: 944
# 使用SSL方式
properties:
mail:
smtp:
socketFactory:
class: javax.net.ssl.SSLSocketFactory
qq邮箱和163邮箱授权码跟端口如何获取跟查看,请看本文章最后的参考链接
三、实现代码(Controller层)
public JavaMailSenderImpl getJavaMailSender(Map<String,Object> map) {
// 邮件发送者
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost(map.get("EMAILTYPE").toString());
//5、SMTP服务器: 默认端口 163邮箱与qq邮箱端口不一样
if (map.get("EMAILTYPE").toString().equals("smtp.163.com")){
javaMailSender.setPort(25);
}else if (map.get("EMAILTYPE").toString().equals("smtp.qq.com")){
javaMailSender.setPort(587);
}
//6、//发送邮件协议名称
javaMailSender.setProtocol("smtp");
//7、编码格式
javaMailSender.setDefaultEncoding("UTF-8");
javaMailSender.setUsername(map.get("EMAILURL").toString());
javaMailSender.setPassword(map.get("EMAILPWD").toString());
//8、创建连接对象,连接到邮箱服务器
Properties properties = new Properties();
//发送服务器需要身份验证,要采用指定用户名密码的方式去认证
properties.put("mail.smtp.auth", true);
properties.put("mail.smtp.starttls.enable", true);
//9、添加连接对象到邮件对象中
javaMailSender.setJavaMailProperties(properties);
return javaMailSender;
}
//声明一个Message对象(代表一封邮件),从session中创建
private MimeMessage getMimeMessage(String username, String toEmail, String subject, String text, JavaMailSenderImpl javaMailSender) throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
//发件人
mimeMessageHelper.setFrom(username);
//收件人 : 可以发送给多个收件人,该方法有一个重载的 数组形参
mimeMessageHelper.setTo(toEmail);
//邮件主题
mimeMessageHelper.setSubject(subject);
//邮件内容
mimeMessageHelper.setText(text, true);
return mimeMessage;
}
@RequestMapping("/sendMail")
@ResponseBody
public Map<String,Object> sendMail(HttpServletRequest request, HttpServletResponse response) throws Exception{
Map<String,Object> mapOut = new HashMap<>();
//获取参数 我这里是封装好的方法,请按自己的方法修改
Map<String, Object> mapArgu = CFunc.PackArguToMap(request, response);
//从数据库中取得邮箱 这里不多展示 自己写死邮箱都可以
Map<String,Object> email = firstTrialService.getEmailDetail();
if (email==null){
mapOut.put("status","error");
mapOut.put("message","发件邮箱不存在,请进行维护");
return mapOut;
}
String username = email.get("EMAILURL").toString();
String toEmail = "发送邮箱的email";
String subject = "标题";
String text = "内容";
//发送邮件
JavaMailSenderImpl javaMailSender = getJavaMailSender(email);
MimeMessage mimeMessage = getMimeMessage(username, toEmail, subject, text, javaMailSender);
javaMailSender.send(mimeMessage);
mapOut.put("status","ok");
return mapOut;
}
参考链接:
https://blog.youkuaiyun.com/qq_42449963/article/details/123285035
https://www.youkuaiyun.com/tags/OtDaUg2sMjA3MzYtYmxvZwO0O0OO0O0O.html