一、pom.xml
org.springframework.boot spring-boot-starter-mail
二、配置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(Mapmap) { // 邮件发送者 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 sendMail(HttpServletRequest request, HttpServletResponse response) throws Exception{ Map mapOut = new HashMap<>(); //获取参数 我这里是封装好的方法,请按自己的方法修改 Map mapArgu = CFunc.PackArguToMap(request, response); //从数据库中取得邮箱 这里不多展示 自己写死邮箱都可以 Map 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.csdn.net/qq_42449963/article/details/123285035
https://www.csdn.net/tags/OtDaUg2sMjA3MzYtYmxvZwO0O0OO0O0O.html



