使用spring maill发送邮件
发布日期:2021-05-08 03:54:59 浏览次数:22 分类:精选文章

本文共 9745 字,大约阅读时间需要 32 分钟。

使用spring maill发送邮件

三种不同内容及附件

  1. 发送简易邮件
  2. 发送Html格式的可带附件的邮件
  3. 发送基于thymeleaf模板引擎的可带附件的邮件

三种方式基本配置

1、在pom文件中添加:

org.springframework.boot
spring-boot-starter-mail

2、配置文件:

application.properties:

#thymeleafspring.thymeleaf.mode=HTMLspring.thymeleaf.cache=falsespring.thymeleaf.prefix=classpath:/templates/#mailspring.mail.properties.mail.smtp.auth=truespring.mail.properties.mail.smtp.starttls.enable=truespring.mail.properties.mail.smtp.starttls.required=truespring.mail.default-encoding=UTF-8#使用qq发送邮件spring.profiles.active=qq

application-qq.properties:

# JavaMailSender 邮件发送的配置spring.mail.host=smtp.qq.com#QQ邮箱spring.mail.username=1043437643@qq.com#QQ邮箱的授权码spring.mail.password=dkflmkddyzcybdda

application-163.properties:(选配)

spring.mail.host=smtp.163.comspring.mail.username=xxx@163.com#163邮箱密码spring.mail.password=xxxxxx

3、创建Email实体类EmailBo:

private Integer id;/** 邮件主题 */private String subject;/** 邮件显示内容 */private String content;/** 发送人 */private String sender;/** 收件人 */private String[] recipient;/** 抄送人 */private String[] cc;/** 内容是否是html */private boolean isHtml;/** 附件列表 一个map存储一个附件的名称和路径 */private List
> attachFiles;

1、发送简易邮件

编写一个发送邮件的工具类EmailUtils添加下面内容:

public class EmailUtils {       private static final Logger logger = LoggerFactory.getLogger(EmailUtils.class);    /**     * 发送简易邮件     * @param emailBo     * @return     */    public static boolean sendSimpleMail(JavaMailSender javaMailSender,EmailBo emailBo) {           boolean flag = true;        try {               //获取邮件对象            SimpleMailMessage simpleMailMessage = new SimpleMailMessage();            //发件人            simpleMailMessage.setFrom(emailBo.getSender());            //收件人            simpleMailMessage.setTo(emailBo.getRecipient());            //抄送人            simpleMailMessage.setCc(emailBo.getCc());            //邮件主题            simpleMailMessage.setSubject(emailBo.getSubject());            //邮件内容            simpleMailMessage.setText(emailBo.getContent());            //发送邮件            javaMailSender.send(simpleMailMessage);        } catch (MailException e) {               logger.error("邮件发送失败:{}", e.getMessage());            flag = false;        }        return flag;    }}

调用EmailUtils工具类发送邮件:

@RestController@RequestMapping("email")public class EmailController {       private static final Logger logger = LoggerFactory.getLogger(EmailController.class);    //读取环境配置    @Autowired    private Environment env;    //spring邮件发送接口    @Autowired    private JavaMailSender javaMailSender;    @RequestMapping("sendEmail")    public Boolean sendEmail(){           EmailBo emailBo = new EmailBo();        //设置发件人从配置文件读取        emailBo.setSender(env.getProperty("spring.mail.username"));        //设置收件人        emailBo.setRecipient(new String[]{   "321771738@qq.com"});        //设置抄送人        emailBo.setCc(new String[]{   "1787470815@qq.com"});        //设置主题        emailBo.setSubject("主题");        //设置内容        emailBo.setContent("内容");        boolean isSend = EmailUtils.sendSimpleMail(javaMailSender,emailBo);        logger.info("邮件发送:{}", isSend);        return isSend;    }}

2、发送Html格式的可带附件的邮件(可多个附件)

新建一个常量类EmailConf保存附件的名称和路径:

public class EmailConf {       //文件一    public static final String FILE_NAME = "test1.docx";    public static final String FILE_PATH ="C:\\Users\\86177\\Desktop\\test1.docx.docx";    //文件二    public static final String FILE_NAME2 = "test2.docx";    public static final String FILE_PATH2 = "C:\\Users\\86177\\Desktop\\test2.docx";}

编写一个发送邮件的工具类EmailUtils添加下面内容:

(若工具类已存在可在工具类EmailUtils中新添加下面方法)

public class EmailUtils {       private static final Logger logger = LoggerFactory.getLogger(EmailUtils.class);    /**     * 发送html格式的可带附件的邮件     * 可多个附件     * @param emailBo     */    public static boolean sendHtmlMailWithAttachment(JavaMailSender javaMailSender,EmailBo emailBo) throws MessagingException {           boolean flag = true;        try {               //设置邮件发送的基本配置(发送人,标题,内容。。。)            MimeMessage mimeMessage = javaMailSender.createMimeMessage();            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true,"UTF-8");            mimeMessageHelper.setSubject(emailBo.getSubject());            mimeMessageHelper.setText(emailBo.getContent(), emailBo.isHtml());            mimeMessageHelper.setFrom(emailBo.getSender());            mimeMessageHelper.setTo(emailBo.getRecipient());            //抄送人参数不为null时设置抄送人            if (emailBo.getCc() != null) {                   mimeMessageHelper.setCc(emailBo.getCc());            }            //附件参数不为空时,循环获取附件            if (emailBo.getAttachFiles() != null) {                   FileSystemResource file = null;                for (Map
attachment : emailBo.getAttachFiles()) { //获取文件路径(与调用工具方法时的参数TreeMap对应) String filePath = attachment.get("filePath"); //获取文件名称(与调用工具方法时的参数TreeMap对应) String fileName = attachment.get("fileName"); //获取文件 file = new FileSystemResource(filePath); //将文件添加至附件列表 /*mimeMessageHelper.addAttachment(fileName, file);*/ try { //将文件添加至附件列表--文件名为中文时需采用UTF-8方式防止乱码 //此处需捕获或抛出异常 mimeMessageHelper.addAttachment(MimeUtility.encodeWord(fileName,"UTF-8","B"), file); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } //发送邮件 javaMailSender.send(mimeMessage); } catch (MessagingException e) { logger.error("邮件发送失败:{}", e.getMessage()); flag = false; } return flag; }}

调用EmailUtils工具类发送邮件:

@RestController@RequestMapping("email")public class EmailController {       private static final Logger logger = LoggerFactory.getLogger(EmailController.class);    //读取环境配置    @Autowired    private Environment env;    //spring邮件发送接口    @Autowired    private JavaMailSender javaMailSender;    @RequestMapping("sendHtmlEmail")    public Boolean sendHtmlEmail(){           EmailBo emailBo = new EmailBo();        //设置发件人从配置文件读取        emailBo.setSender(env.getProperty("spring.mail.username"));        //设置收件人        emailBo.setRecipient(new String[]{   "321771738@qq.com"});        //设置抄送人        emailBo.setCc(new String[]{   "1787470815@qq.com"});        //设置主题        emailBo.setSubject("HTML格式的测试邮件");        //设置内容        emailBo.setContent("

百度一下,你就知道

"); //设置是否为Html格式 emailBo.setHtml(true); //设置附件集合(可采用List方式设置多个) List
> maps = new ArrayList<>(); Map
map1 = new TreeMap<>(); map1.put("filePath",EmailConf.FILE_PATH); map1.put("fileName",EmailConf.FILE_NAME); maps.add(map1); Map
map2 = new TreeMap<>(); map2.put("filePath",EmailConf.FILE_PATH2); map2.put("fileName",EmailConf.FILE_NAME2); maps.add(map2); //设置附件集合(可采用List
方式设置多个) emailBo.setAttachFiles(maps); boolean isSend = false; try { //调用工具类 //需捕获异常 isSend = EmailUtils.sendHtmlMailWithAttachment(javaMailSender,emailBo); } catch (MessagingException e) { e.printStackTrace(); } logger.info("邮件发送:{}", isSend); return isSend; } }

3、发送邮件内容基于thymeleaf模板引擎的可带附件的邮件

pom添加依赖jar包:

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

在resources/templates目录下新建email.html:

    
Title您好,这是验证邮件,请点击下面的链接完成验证,
激活账号

调用EmailUtils工具类发送邮件:

基于thymeleaf模板引擎发送和前面Html格式的发送其实差不多,只是html格式的邮件是把邮件内容用html代码输入,而thymeleaf模板引擎是获取上下文,设置模板的参数、把解析模板的值作为邮件内容。所以可以复用发送Html格式的可带附件的邮件的util工具类方法
//基于thymeleaf模板引擎发送邮件所需thymeleaf工具类包

@Autowiredprivate TemplateEngine templateEngine;@RestController@RequestMapping("email")public class EmailController {       private static final Logger logger = LoggerFactory.getLogger(EmailController.class);    //读取环境配置    @Autowired    private Environment env;    //spring邮件发送接口    @Autowired    private JavaMailSender javaMailSender;    //基于thymeleaf模板引擎发送邮件所需thymeleaf工具类包    @Autowired    private TemplateEngine templateEngine;    @RequestMapping("sendHtmlEmail")    public Boolean sendHtmlEmail(){           //替换模板中的 "@{${href}}" 变量的值        //Context导包导   import org.thymeleaf.context.Context;        Context context = new Context();        context.setVariable("href", "http://www.baidu.com");        //解析模板   作为邮件内容        //templateEngine 需注入        String content = templateEngine.process("email", context);        EmailBo emailBo = new EmailBo();        //设置发件人从配置文件读取        emailBo.setSender(env.getProperty("spring.mail.username"));        //设置收件人        emailBo.setRecipient(new String[]{   "321771738@qq.com"});        //设置抄送人        emailBo.setCc(new String[]{   "1787470815@qq.com"});        //设置主题        emailBo.setSubject("HTML格式的测试邮件");        //设置内容        emailBo.setContent(content);        //设置是否为Html格式        emailBo.setHtml(true);        //设置附件集合(可采用List方式设置多个)        List
> maps = new ArrayList<>(); Map
map1 = new TreeMap<>(); map1.put("filePath",EmailConf.FILE_PATH); map1.put("fileName",EmailConf.FILE_NAME); maps.add(map1); Map
map2 = new TreeMap<>(); map2.put("filePath",EmailConf.FILE_PATH2); map2.put("fileName",EmailConf.FILE_NAME2); maps.add(map2); //设置附件集合(可采用List
方式设置多个) emailBo.setAttachFiles(maps); boolean isSend = false; try { //调用工具类 //需捕获异常 isSend = EmailUtils.sendHtmlMailWithAttachment(javaMailSender,emailBo); } catch (MessagingException e) { e.printStackTrace(); } logger.info("邮件发送:{}", isSend); return isSend; }}
上一篇:所谓的数据库物理外键与逻辑外键
下一篇:C++ empty()函数

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年03月21日 06时08分06秒