SpringBoot实现发送邮件功能
背景
有个小伙伴问我你以前发邮件功能怎么弄的。然后我就给他找了个demo,正好在此也写一下,分享给大家。
理清痛点
发送邮件,大家可以想一下,坑的地方在哪?
我觉得是三个吧。
第一:邮件白名单问题。
第二:邮件超时问题。
第三:邮件带附件问题。
我下面的demo都会介绍这些问题及解决。
实现方案
准备工作
我们先要准备一个可以发送的邮箱,我这里以我的163邮箱为例,现在发送邮件的规则,要求你输入一种叫做授权码的东西,注意这个东西不是密码。
获取授权码的步骤:
SpringBoot项目引入邮件包
org.springframework.boot spring-boot-starter-mail
yml配置邮件相关
spring: mail: #邮件服务地址 host:smtp.163.com #端口,可不写默认 port:25 #编码格式 default-encoding:utf-8 #用户名 username:xxx@163.com #授权码,就是我们刚才准备工作获取的代码 password:xxx #其它参数 properties: mail: smtp: #如果是用SSL方式,需要配置如下属性,使用qq邮箱的话需要开启 ssl: enable:true required:true #邮件接收时间的限制,单位毫秒 timeout:10000 #连接时间的限制,单位毫秒 connectiontimeout:10000 #邮件发送时间的限制,单位毫秒 writetimeout:10000
针对于上面提的超时问题,捕获超时异常就可解决。
邮件发送工具类
主要通过以下工具类就可以满足发送java邮件的需要。当我们进行好yml配置后,SpringBoot会帮助我们自动配置JavaMailSender我们通过这个java类就可以实现操作java来发送邮件。以下列举了几种常用的邮件。
@Service publicclassMailService{ privatestaticfinalLoggerlogger=LoggerFactory.getLogger(MailServiceImpl.class); @Autowired privateJavaMailSendermailSender; privatestaticfinalStringSENDER="xxx@163.com"; /** *发送普通邮件 * *@paramto收件人 *@paramsubject主题 *@paramcontent内容 */ @Override publicvoidsendSimpleMailMessge(Stringto,Stringsubject,Stringcontent){ SimpleMailMessagemessage=newSimpleMailMessage(); message.setFrom(SENDER); message.setTo(to); message.setSubject(subject); message.setText(content); try{ mailSender.send(message); }catch(Exceptione){ logger.error("发送简单邮件时发生异常!",e); } } /** *发送HTML邮件 * *@paramto收件人 *@paramsubject主题 *@paramcontent内容 */ @Override publicvoidsendMimeMessge(Stringto,Stringsubject,Stringcontent){ MimeMessagemessage=mailSender.createMimeMessage(); try{ //true表示需要创建一个multipartmessage MimeMessageHelperhelper=newMimeMessageHelper(message,true); helper.setFrom(SENDER); helper.setTo(to); helper.setSubject(subject); helper.setText(content,true); mailSender.send(message); }catch(MessagingExceptione){ logger.error("发送MimeMessge时发生异常!",e); } } /** *发送带附件的邮件 * *@paramto收件人 *@paramsubject主题 *@paramcontent内容 *@paramfilePath附件路径 */ @Override publicvoidsendMimeMessge(Stringto,Stringsubject,Stringcontent,StringfilePath){ MimeMessagemessage=mailSender.createMimeMessage(); try{ //true表示需要创建一个multipartmessage MimeMessageHelperhelper=newMimeMessageHelper(message,true); helper.setFrom(SENDER); helper.setTo(to); helper.setSubject(subject); helper.setText(content,true); FileSystemResourcefile=newFileSystemResource(newFile(filePath)); StringfileName=file.getFilename(); helper.addAttachment(fileName,file); mailSender.send(message); }catch(MessagingExceptione){ logger.error("发送带附件的MimeMessge时发生异常!",e); } } /** *发送带静态文件的邮件 * *@paramto收件人 *@paramsubject主题 *@paramcontent内容 *@paramrscIdMap需要替换的静态文件 */ @Override publicvoidsendMimeMessge(Stringto,Stringsubject,Stringcontent,MaprscIdMap){ MimeMessagemessage=mailSender.createMimeMessage(); try{ //true表示需要创建一个multipartmessage MimeMessageHelperhelper=newMimeMessageHelper(message,true); helper.setFrom(SENDER); helper.setTo(to); helper.setSubject(subject); helper.setText(content,true); for(Map.Entry entry:rscIdMap.entrySet()){ FileSystemResourcefile=newFileSystemResource(newFile(entry.getValue())); helper.addInline(entry.getKey(),file); } mailSender.send(message); }catch(MessagingExceptione){ logger.error("发送带静态文件的MimeMessge时发生异常!",e); } } }
发送邮件的demo
@RunWith(SpringRunner.class) @SpringBootTest publicclassSpringbooEmailDemoApplicationTests{ @Autowired privateMailServicemailService; privatestaticfinalStringTO="xxx@qq.com"; privatestaticfinalStringSUBJECT="测试邮件"; privatestaticfinalStringCONTENT="testcontent"; /** *测试发送普通邮件 */ @Test publicvoidsendSimpleMailMessage(){ mailService.sendSimpleMailMessge(TO,SUBJECT,CONTENT); } /** *测试发送html邮件 */ @Test publicvoidsendHtmlMessage(){ StringhtmlStr="Test
"; mailService.sendMimeMessge(TO,SUBJECT,htmlStr); } /** *测试发送带附件的邮件 *@throwsFileNotFoundException */ @Test publicvoidsendAttachmentMessage()throwsFileNotFoundException{ Filefile=ResourceUtils.getFile("classpath:test.txt"); StringfilePath=file.getAbsolutePath(); mailService.sendMimeMessge(TO,SUBJECT,CONTENT,filePath); } /** *测试发送带附件的邮件 *@throwsFileNotFoundException */ @Test publicvoidsendPicMessage()throwsFileNotFoundException{ StringhtmlStr="测试:图片1
图片2"; Map rscIdMap=newHashMap<>(2); rscIdMap.put("pic1",ResourceUtils.getFile("classpath:pic01.jpg").getAbsolutePath()); rscIdMap.put("pic2",ResourceUtils.getFile("classpath:pic02.jpg").getAbsolutePath()); mailService.sendMimeMessge(TO,SUBJECT,htmlStr,rscIdMap); } }
白名单问题
如果是发送给固定邮箱,可以直接在固定邮箱里面设置白名单,如果频繁的发送给多个邮箱,最好设置以下发送时间间隔,不要不断的给某一个邮箱发送。
总结
以上所述是小编给大家介绍的SpringBoot发送邮件功能实现,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。