java 代码发送邮件添加附件_(实用干货) | Spring Boot集成发送邮件Mail完整示例代码

工作中经常会遇到发邮件的功能,如邮件预警,注册时发一个邮件确认等,这里给出在Spring Boot中发送邮件的完整集成示例

邮件发送支持的内容类型如下:

  1. 发送简单邮件。
  2. 发送html格式的邮件
  3. 发送带附件简单邮件
  4. 发送模板邮件

1. pom.xml

发送模板邮件需要用到spring-boot-starter-thymeleaf,其他其他邮件内容不需要该依赖

org.springframework.boot spring-boot-starter-mailorg.springframework.boot spring-boot-starter-thymeleaf

2. application.properties

spring.mail.host=smtp.163.comspring.mail.username=xxx@163.com# 注意这里的密码不是邮箱的登录密码spring.mail.password=邮箱客户端授权码spring.mail.properties.mail.smtp.auth=truespring.mail.properties.mail.smtp.starttls.enable=truespring.mail.properties.mail.smtp.starttls.required=true

注意:如果密码不对在发送邮件中会报异常javax.mail.AuthenticationFailedException: 535 Error, 如果设置了也开启了还是不行再重新设置一下

6ac87d8a6c11221fe44d492ff842dbab.png
9434a8a0eaa8885e10c4cea0265f8d57.png

3. MailUtil

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.mail.MailException;import org.springframework.mail.SimpleMailMessage;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.MimeMessageHelper;import org.springframework.stereotype.Component;import org.thymeleaf.TemplateEngine;import org.thymeleaf.context.Context;import javax.mail.MessagingException;import javax.mail.internet.MimeMessage;import java.io.File;@Componentpublic class MailUtil { private final Logger logger = LoggerFactory.getLogger(getClass()); @Autowired JavaMailSender mailSender; @Autowired TemplateEngine templateEngine; /** * 发送简单邮件 * @param from 发送人 * @param to 接收人 * @param carbonCopy 抄送人 * @param subject 主题 * @param content 内容 */ public void sendSimpleEmail(String from, String[] to, String[] carbonCopy, String subject, String content) { long startTimestamp = System.currentTimeMillis(); logger.info("Start send mail ... "); try { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(from); message.setTo(to); message.setCc(carbonCopy); message.setSubject(subject); message.setText(content); mailSender.send(message); logger.info("Send mail success, cost {} million seconds", System.currentTimeMillis() - startTimestamp); } catch (MailException e) { logger.error("Send mail failed, error message is : {} ", e.getMessage()); } } /** * 发送html邮件 */ public void sendHtmlEmail(String deliver, String[] receiver, String[] carbonCopy, String subject, String content, boolean isHtml) { long startTimestamp = System.currentTimeMillis(); logger.info("Start send email ..."); try { MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(message); messageHelper.setFrom(deliver); messageHelper.setTo(receiver); messageHelper.setCc(carbonCopy); messageHelper.setSubject(subject); messageHelper.setText(content, isHtml); mailSender.send(message); logger.info("Send email success, cost {} million seconds", System.currentTimeMillis() - startTimestamp); } catch (MessagingException e) { logger.error("Send email failed, error message is {} ", e.getMessage()); e.printStackTrace(); } } /** * 发送带附件的邮件 */ public void sendAttachmentFileEmail(String deliver, String[] receiver, String[] carbonCopy, String subject, String content, boolean isHtml, String fileName, File file) { long startTimestamp = System.currentTimeMillis(); logger.info("Start send mail ..."); try { MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(message, true); messageHelper.setFrom(deliver); messageHelper.setTo(receiver); messageHelper.setCc(carbonCopy); messageHelper.setSubject(subject); messageHelper.setText(content, isHtml); messageHelper.addAttachment(fileName, file); mailSender.send(message); logger.info("Send mail success, cost {} million seconds", System.currentTimeMillis() - startTimestamp); } catch (MessagingException e) { logger.error("Send mail failed, error message is {}", e.getMessage()); e.printStackTrace(); } } /** * 发送模板邮件 */ public void sendTemplateEmail(String deliver, String[] receiver, String[] carbonCopy, String subject, String template, Context context) { long startTimestamp = System.currentTimeMillis(); logger.info("Start send mail ..."); try { MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(message); String content = templateEngine.process(template, context); messageHelper.setFrom(deliver); messageHelper.setTo(receiver); messageHelper.setCc(carbonCopy); messageHelper.setSubject(subject); messageHelper.setText(content, true); mailSender.send(message); logger.info("Send mail success, cost {} million seconds", System.currentTimeMillis() - startTimestamp); } catch (MessagingException e) { logger.error("Send mail failed, error message is {} ", e.getMessage()); e.printStackTrace(); } }}

src/main/resource/templates/mailTemplate.html

 Title[[${content}]] 
[[${content}]]
[[${content}]]

4. Test

@RunWith(SpringRunner.class)@SpringBootTestpublic class MailApplicationTests { @Autowired private MailUtil mailUtil; @Test public void sendSimpleEmail() { String deliver = "xxx@163.com"; String[] receiver = {"xxx@gmail.com"}; String[] carbonCopy = {"xxx@qq.com"}; String subject = "This is a simple email"; String content = "This is a simple content"; try { mailUtil.sendSimpleEmail(deliver, receiver, carbonCopy, subject, content); } catch (Exception e) { assertFalse("Send simple email failed", true); e.printStackTrace(); } } @Test public void sendHtmlMail(){ String deliver = "xxx@163.com"; String[] receiver = {"xxx@gmail.com"}; String[] carbonCopy = {"xxx@qq.com"}; String subject = "退信代码说明"; String content = "

org.springframework.mail.MailSendException: Failed messages: " + "com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smtp9,DcCowAAXf2r4c8da2cPWBQ--." + "33626S3 1523020853,please see " + "http://mail.163.com/help/help_spam_16.htm?ip=43.243.148.212&hostid=smtp9&time=1523020853

"; boolean isHtml = true; mailUtil.sendHtmlEmail(deliver, receiver, carbonCopy, subject, content, isHtml); } @Test public void sendAttachmentFileEmail() { String FILE_PATH = "/Users/mengday/Desktop/02.png"; String deliver = "xxx@163.com"; String[] receiver = {"xxx@gmail.com"}; String[] carbonCopy = {"xxx@qq.com"}; String subject = "退信代码说明"; String content = "

org.springframework.mail.MailSendException: Failed messages: " + "com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smtp9,DcCowAAXf2r4c8da2cPWBQ--." + "33626S3 1523020853,please see " + "http://mail.163.com/help/help_spam_16.htm?ip=43.243.148.212&hostid=smtp9&time=1523020853

"; boolean isHtml = true; File file = new File(FILE_PATH); String fileName = FILE_PATH.substring(FILE_PATH.lastIndexOf(File.separator)); try { mailUtil.sendAttachmentFileEmail(deliver, receiver, carbonCopy, subject, content, isHtml, fileName, file); } catch (Exception e) { e.printStackTrace(); assertFalse("Send attachment file email failed", true); } } @Test public void sendTemplateEmail() { String deliver = "xxx@163.com"; String[] receiver = {"xxx@gmail.com"}; String[] carbonCopy = {"xxx@qq.com"}; String subject = "DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件"; String template = "mailTemplate"; String content = "554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件"; Context context = new Context(); context.setVariable("content", content); try { mailUtil.sendTemplateEmail(deliver, receiver, carbonCopy, subject, template, context); } catch (Exception e) { e.printStackTrace(); assertFalse("Send template email failed", true); } }}

注意:如果标题和内容过于简单,或者包含test之类的内容,163会认为这是垃圾邮件,会造成发送失败,报以下异常,解决办法就是将发送的表体和内容写的比较真实点

org.springframework.mail.MailSendException: Failed messages: com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smtp7,C8CowABH3LWqe8daHXmDNw--.3202S3 1523022763,please see http://mail.163.com/help/help_spam_16.htm?ip=101.69.253.74&hostid=smtp7&time=1523022763
5378eebcb0221356f887ff10c506de52.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值