文章内容
1、引入邮件依赖包
1 2 3 4 | < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-mail</ artifactId > </ dependency > |
2、yml配置邮件相关
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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 |
3、邮件发送工具类
主要通过以下工具类就可以满足发送java邮件的需要。当我们进行好 yml 配置后,SpringBoot会帮助我们自动配置 JavaMailSender 我们通过这个java类就可以实现操作java来发送邮件。以下列举了几种常用的邮件。
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 | @Service public class MailService { private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl. class ); @Autowired private JavaMailSender mailSender; private static final String SENDER = "xxx@163.com" ; /** * 发送普通邮件 * * @param to 收件人 * @param subject 主题 * @param content 内容 */ @Override public void sendSimpleMailMessge(String to, String subject, String content) { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(SENDER); message.setTo(to); message.setSubject(subject); message.setText(content); try { mailSender.send(message); } catch (Exception e) { logger.error( "发送简单邮件时发生异常!" , e); } } /** * 发送 HTML 邮件 * * @param to 收件人 * @param subject 主题 * @param content 内容 */ @Override public void sendMimeMessge(String to, String subject, String content) { MimeMessage message = mailSender.createMimeMessage(); try { //true表示需要创建一个multipart message MimeMessageHelper helper = new MimeMessageHelper(message, true ); helper.setFrom(SENDER); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true ); mailSender.send(message); } catch (MessagingException e) { logger.error( "发送MimeMessge时发生异常!" , e); } } /** * 发送带附件的邮件 * * @param to 收件人 * @param subject 主题 * @param content 内容 * @param filePath 附件路径 */ @Override public void sendMimeMessge(String to, String subject, String content, String filePath) { MimeMessage message = mailSender.createMimeMessage(); try { //true表示需要创建一个multipart message MimeMessageHelper helper = new MimeMessageHelper(message, true ); helper.setFrom(SENDER); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true ); FileSystemResource file = new FileSystemResource( new File(filePath)); String fileName = file.getFilename(); helper.addAttachment(fileName, file); mailSender.send(message); } catch (MessagingException e) { logger.error( "发送带附件的MimeMessge时发生异常!" , e); } } /** * 发送带静态文件的邮件 * * @param to 收件人 * @param subject 主题 * @param content 内容 * @param rscIdMap 需要替换的静态文件 */ @Override public void sendMimeMessge(String to, String subject, String content, Map<String, String> rscIdMap) { MimeMessage message = mailSender.createMimeMessage(); try { //true表示需要创建一个multipart message MimeMessageHelper helper = new MimeMessageHelper(message, true ); helper.setFrom(SENDER); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true ); for (Map.Entry<String, String> entry : rscIdMap.entrySet()) { FileSystemResource file = new FileSystemResource( new File(entry.getValue())); helper.addInline(entry.getKey(), file); } mailSender.send(message); } catch (MessagingException e) { logger.error( "发送带静态文件的MimeMessge时发生异常!" , e); } } } |
4、发送邮件的demo
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | @RunWith (SpringRunner. class ) @SpringBootTest public class SpringbooEmailDemoApplicationTests { @Autowired private MailService mailService; private static final String TO = "xxx@qq.com" ; private static final String SUBJECT = "测试邮件" ; private static final String CONTENT = "test content" ; /** * 测试发送普通邮件 */ @Test public void sendSimpleMailMessage() { mailService.sendSimpleMailMessge(TO, SUBJECT, CONTENT); } /** * 测试发送html邮件 */ @Test public void sendHtmlMessage() { String htmlStr = "<h1>Test</h1>" ; mailService.sendMimeMessge(TO, SUBJECT, htmlStr); } /** * 测试发送带附件的邮件 * @throws FileNotFoundException */ @Test public void sendAttachmentMessage() throws FileNotFoundException { File file = ResourceUtils.getFile( "classpath:test.txt" ); String filePath = file.getAbsolutePath(); mailService.sendMimeMessge(TO, SUBJECT, CONTENT, filePath); } /** * 测试发送带附件的邮件 * @throws FileNotFoundException */ @Test public void sendPicMessage() throws FileNotFoundException { String htmlStr = "<html><body>测试:图片1 <br> <img src='cid:pic1'/> <br>图片2 <br> <img src='cid:pic2'/></body></html>" ; Map<String, String> rscIdMap = new HashMap<>( 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); } } |
5、白名单问题
如果是发送给固定邮箱,可以直接在固定邮箱里面设置白名单,如果频繁的发送给多个邮箱,最好设置以下发送时间间隔,不要不断的给某一个邮箱发送。