ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringBoot2.x邮件发送

2022-05-17 19:35:49  阅读:149  来源: 互联网

标签:content String param 发送 SpringBoot2 import 邮件 subject


1、pom引入依赖

 <!--邮件发送-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
  </dependency>

 <!--邮件模板-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

 

2、application.yml增加配置

#邮件配置
  mail:
    host: mail.qq.com
    default-encoding: UTF-8
    username: test@qq.com
    password: 123456
    recipients: 23323@qq.com
    properties:
      mail:
        smtp:
          auth: true
          ssl:
            enable: false
          starttls:
            enable: false
            required: false

 

3、封装邮件发送工具类

import com.alibaba.fastjson.JSONObject;import freemarker.template.Template;
import freemarker.template.TemplateException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.CharEncoding;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;

import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.IOException;
import java.util.Date;
import java.util.List;

/**
 * @Description: 邮件发送工具类
 * @Author: bug毁灭者
 * @Date: 2022/4/21 13:49
 * @Version: 1.0
 */
@Component
@Slf4j
public class EmailUtil {

    @Resource
    private JavaMailSender javaMailSender;

    @Value("${spring.mail.username}")
    private String fromUser;

    public String getFromUser() {
        return fromUser;
    }

    public void setFromUser(String fromUser) {
        this.fromUser = fromUser;
    }

    /**
     * 邮件发送开关
     */
    @Value("${mail.send.enable}")
    private boolean enable;

    /**
     * 邮件发送开关
     */
    @Value("${mail.send.test}")
    private String testEmail;

    @Resource
   //定义你自己的邮件发送失败记录表 private SwFailEmailRecordMapper swFailEmailRecordMapper; @Autowired private FreeMarkerConfigurer freeMarkerConfigurer; @Resource
   //定义你自己的邮件服务配置数据表   private EmailServerMapper EmailServerMapper; /** * Description: 是否需要真实发送邮件 * * @param: to * @Author: bug毁灭者 * @Date: 2021/12/22 18:26 * @Return: java.lang.String * @throws: */ private String emailAddr(String to) { if (enable) { return to; } else { return testEmail; } } /** * @param to 收件人 多个逗号隔开 abc@qq.com,ssd@163.com * @param subject 主题 * @param content 邮件内容 * @return void * @description: 简单邮件发送 * @author: bug毁灭者 * @date: 2021/12/21 13:50 */ public void sendSimpleMail(String to, String subject, String content) { // 构建一个邮件对象 try { SimpleMailMessage message = new SimpleMailMessage(); // 设置邮件主题 message.setSubject(subject); // 设置邮件发送者, message.setFrom(fromUser); // 设置邮件接收者,可以有多个接收者,中间用逗号隔开,以下类似 if (StringUtils.isNotBlank(to)) { message.setTo(emailAddr(to).split(",")); } // 设置邮件发送日期 message.setSentDate(new Date()); // 设置邮件的正文 message.setText(content); // 发送邮件 javaMailSender.send(message); log.info("邮件发送成功--"); } catch (Exception e) { addErrorLog(to, null, subject, content, 0, 0); log.error("邮件发送失败--" + e.getMessage()); log.error("邮件发送失败--参数" + to + "---" + subject + "---" + content); //e.printStackTrace(); } } /** * Description: 发送邮件 * * @param: to 发送,多人逗号(,)隔开 * @param: cc 抄送,多人逗号(,)隔开 * @param: subject * @param: content * @Author: bug毁灭者 * @Date: 2021/12/22 16:13 * @Return: void * @throws: */ public void sendHtmlMail(String to, String cc, String subject, String content) throws Exception { try { //注意这里使用的是MimeMessage MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(fromUser); if (StringUtils.isNotBlank(to)) { helper.setTo(emailAddr(to).split(",")); } if (StringUtils.isNotBlank(cc)) { helper.setCc(emailAddr(cc).split(",")); } helper.setSubject(subject); //第二个参数:格式是否为html helper.setText(content, true); javaMailSender.send(message); } catch (Exception e) { addErrorLog(to, cc, subject, content, 0, 1); log.error("发送邮件时发生异常!", e); } } /** * 发送模板邮件 * * @param to * @param subject * @param template */ public void sendTemplateMail(String to, String cc, String subject, String template, Object object) throws Exception { try { // 获得模板 log.info("邮件模板参数--"+ JSONObject.toJSONString(object)); Template temp = freeMarkerConfigurer.getConfiguration().getTemplate(template); // 传入数据模型到模板,替代模板中的占位符,并将模板转化为html字符串 String templateHtml = FreeMarkerTemplateUtils.processTemplateIntoString(temp, object); // 该方法本质上还是发送html邮件,调用之前发送html邮件的方法 this.sendHtmlMail(to, cc, subject, templateHtml); log.info("邮件发送成功--"); } catch (TemplateException e) { log.error("发送邮件时发生异常!", e); } catch (IOException e) { log.error("发送邮件时发生异常!", e); } } /** * Description: 记录邮件发送错误日志 * * @param: to * @param: cc * @param: subject * @param: content * @param: attachmentName * @param: attchmentUrl * @param: send * @param: sendType * @Author: bug毁灭者 * @Date: 2021/12/22 17:05 * @Return: void * @throws: */ public void addErrorLog(String to, String cc, String subject, String content, String attachmentName, String attchmentUrl, int send, int sendType) { try {
//定义你自己的失败记录表模型 FailEmailRecord record = new FailEmailRecord(); record.setRecipients(to); record.setCcEmails(cc); record.setContent(content); record.setSubject(subject); record.setSendTime(new Date()); record.setAttachmentName(attachmentName); record.setAttchmentUrl(attchmentUrl); record.setIsSend(send); record.setSendType(sendType); FailEmailRecordMapper.insertSelective(record); } catch (Exception e) { log.error(String.format("记录邮件错误日志失败%s", e.toString())); } } /** * Description: 记录邮件发送错误日志 * * @param: to * @param: cc * @param: subject * @param: content * @param: send * @param: sendType * @Author: bug毁灭者 * @Date: 2021/12/22 17:10 * @Return: void * @throws: */ public void addErrorLog(String to, String cc, String subject, String content, int send, int sendType) { addErrorLog(to, cc, subject, content, null, null, send, sendType); } /** * Description: 发送邮件,失败不加入记录 * * @param: to 发送,多人逗号(,)隔开 * @param: cc 抄送,多人逗号(,)隔开 * @param: subject * @param: content * @Author: bug毁灭者 * @Date: 2021/12/22 16:13 * @Return: boolean * @throws: */ public boolean sendHtmlMail2(String to, String cc, String subject, String content) { try { //注意这里使用的是MimeMessage MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(fromUser); if (StringUtils.isNotBlank(to)) { helper.setTo(to.split(",")); } if (StringUtils.isNotBlank(cc)) { helper.setCc(cc.split(",")); } helper.setSubject(subject); //第二个参数:格式是否为html helper.setText(content, true); javaMailSender.send(message); return true; } catch (MessagingException e) { log.error("发送邮件时发生异常!", e); return false; } } /** * Description: 获取邮箱配置 * * @Author: bug毁灭者 * @Date: 2021/12/28 13:31 * @Return: org.springframework.mail.javamail.JavaMailSenderImpl * @throws: */ public JavaMailSenderImpl restMail() {
     //从数据库里取最新的邮箱账号配置 EmailServer EmailServer = EmailServerMapper.selectEmailConfig(); List<JavaMailSenderImpl> mailSenders = SpringContextUtils.getBeanListOfType(JavaMailSenderImpl.class); JavaMailSenderImpl javaMailSender = mailSenders.get(0); if (!(javaMailSender.getUsername().equals(EmailServer.getEmailUser()) && javaMailSender.getPassword().equals(EmailServer.getEmailPwd()) && javaMailSender.getHost().equals(EmailServer.getEmailServer()))) { javaMailSender.setHost(EmailServer.getEmailServer()); javaMailSender.setDefaultEncoding(CharEncoding.UTF_8); javaMailSender.setUsername(EmailServer.getEmailUser()); javaMailSender.setPassword(EmailServer.getEmailPwd()); } return javaMailSender; } }

 

标签:content,String,param,发送,SpringBoot2,import,邮件,subject
来源: https://www.cnblogs.com/guliang/p/16282081.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有