知方号

知方号

SpringBoot发送邮件(QQ邮箱、腾讯企业邮箱、网易邮箱、阿里云邮箱...)

SpringBoot发送邮件(QQ邮箱、腾讯企业邮箱、网易邮箱、阿里云邮箱...)

目录

一、获取邮箱授权码

二、引入依赖

三、配置文件(请注意yml格式,或者使用.properties)

四、不带附件发邮箱

五、带附件发邮箱

六、邮箱类型拓展

        本篇文章以QQ邮箱作为发件人写案例演示了不带附件发邮件、带附件发邮件,并在最后讲解了如何用阿里云邮箱、腾讯邮箱、网易邮箱发送邮件.如果不想用qq邮箱,那么可以直接跳过获取邮箱授权码,直接从引入依赖开始看。

一、获取邮箱授权码

         使用SpringBoot发送邮箱,首先需要有邮箱的授权码,用QQ邮箱,那就获取QQ邮箱的授权码,网易邮箱,就获取网易邮箱授权码,打开QQ邮箱的设置,点击账户,找到一下信息:

        点击开启,按照弹出框操作,随后要把给出的邮箱授权码复制出来 !!!如果想要将发送历史保留在邮箱的已发送,将下图红框选项的勾选即可

二、引入依赖 org.springframework.boot spring-boot-starter-mail 三、配置文件(请注意yml格式,或者使用.properties) spring: mail: host: smtp.qq.com #这是邮箱服务器地址 username: 1065055030@qq.com #自己的邮箱,也就是发件人 password: xxxxxxxxxxxxxxxxx #邮箱授权码 default-encoding: UTF-8 #编码格式

        配置文件中的password并不是邮箱密码,而是邮箱授权码,此处填写从qq邮箱复制出来的授权码即可

 四、不带附件发邮箱

        到此配置已经结束,还是非常简单的,下面就来使用,直接上代码,带注释,阅读完即可上手使用,这里不要纠结开发规范了,为了方便,所有东西写到了controller。

@RestControllerpublic class EmailController { @Autowired private JavaMailSender javaMailSender; //发件人邮箱 @Value("${spring.mail.username}") private String from; /** * 不带附件发送邮件 * @param addressee 收件人邮箱 * @param subject 邮件标题 * @param content 邮件内容 * @return ResultVO */ @RequestMapping(value = "/send", method = RequestMethod.POST) public ResultVO sendEmail(String addressee, String subject, String content) { SimpleMailMessage mailMessage = new SimpleMailMessage(); // 发件人邮箱,与配置文件中保持一致,所以直接从配置文件绑定过来了 mailMessage.setFrom(from); // 这个发件人也可以设置为中文名称, 如下代码 // mailMessage.setFrom(new InternetAddress("某某公司xxx" + "")); // 收件人 mailMessage.setTo(addressee); // 标题 mailMessage.setSubject(subject); // 内容, 第一个参数为邮箱内容, 第二个参数为是否启用html格式, // 如果开启, 那么第一个参数如果有html标签, 会自动识别, 邮件样式更好看 mailMessage.setText(content, true); javaMailSender.send(mailMessage); return ResultVO.success(); }} 五、带附件发邮箱

        直接上代码了,此处需要注意的是,即使带附件发送,邮件内容也不能不设置,不设置发送内容则为null,就会报java.io.IOException: Exception writing Multipart这个异常,注意null跟""是有区别的,没有内容可以这么写messageHelper.setText("")。

@RestControllerpublic class EmailController { @Autowired private JavaMailSender javaMailSender; //发件人邮箱 @Value("${spring.mail.username}") private String from; @RequestMapping(value = "/sendFile", method = RequestMethod.POST) public ResultVO sendFile(String addressee, String subject) { List files = Arrays.asList("C:\Users\E480\Desktop\邮件测试文件.txt", "C:\Users\E480\Desktop\邮件测试图片.png"); MimeMessage message = javaMailSender.createMimeMessage(); try { MimeMessageHelper messageHelper = new MimeMessageHelper(message,true); // 发件人邮箱,与配置文件中保持一致,所以直接从配置文件绑定过来了 messageHelper.setFrom(from); // 收件人 messageHelper.setTo(addressee); // 标题 messageHelper.setSubject(subject); // 发送的内容 messageHelper.setText("测试带附件发邮件"); FileSystemResource file=null; for (String filePath : files) { file = new FileSystemResource(filePath); // File.separator相当于,是默认的系统文件分隔符,可以防止切换系统路径出错 messageHelper.addAttachment( filePath.substring(filePath.lastIndexOf(File.separator)), file ); } javaMailSender.send(message); return ResultVO.success(); } catch (MessagingException e) { e.printStackTrace(); return ResultVO.fail(); } }} 六、邮箱类型拓展 1. 网易邮箱

我是用QQ邮箱举例的,如果想要用网易邮箱,配置文件可以这么写,

spring: mail: host: smtp.163.com #这是网易邮箱服务器地址 username: xxxxxxxx #自己的网易邮箱,也就是发件人 password: xxxxxxxx #网易邮箱授权码 default-encoding: UTF-8 #编码格式

        将邮箱服务器地址改为网易,username和password也改为网易的即可,网易的邮箱授权码如何查看如何打开就不再演示,因为本人没有网易邮箱(lll¬ω¬),百度了一下,看与QQ邮箱授权码获取方式大同小异。剩余的操作跟QQ邮箱发送方式一样。

2. 腾讯企业邮箱or阿里云邮箱 spring: # 发送腾讯企业邮箱邮件配置 mail: host: smtp.exmail.qq.com # 如果是阿里云邮箱用 smtp.aliyun.com, 其余都一样 protocol: smtp port: 465 username: xxxx@xxx.com.cn #邮箱地址 password: xxxx #邮箱密码,邮箱的登陆密码,这个不是授权码 properties: # 配置以SSL的方式发送, 这个需要使用这种方式并且端口是465 mail: smtp: auth: true ssl: enable: true socketFactory: class: com.sun.mail.util.MailSSLSocketFactory fallback: false

别的操作也没什么区别

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。