其他分享
首页 > 其他分享> > SpringBoot整合邮件发送工具类

SpringBoot整合邮件发送工具类

作者:互联网

/**
 * @author hzb
 * @Title:
 * @Package
 * @Description:
 * @date 2021/7/2019:08
 */
public class SendMailUtil {

    private static Logger Log = (Logger) LoggerFactory.getLogger(SendMailUtil.class);




    //private static JavaMailSender javaMailSender = SpringBeanUtil.getBean(JavaMailSenderImpl.class);

    private static final Properties instance;


    private SendMailUtil() {
        if (instance != null) {
            throw new IllegalStateException();
        }
    }
    static {
        instance = new Properties();
        instance.setProperty("mail.transport.protocol","smtp");
        instance.setProperty("mail.smtp.host","smtp.qq.com");
        instance.setProperty("mail.smtp.auth","true");
        instance.setProperty("mail.smtp.port","587");
        instance.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
        instance.setProperty("mail.smtp.socketFactory.fallback","false");
        instance.setProperty("mail.smtp.socketFactory.port","587");
    }

    public static final Properties getInstance() {

        return instance;
    }


    /**
     * 纯文本
     *
     * @param subject 标题
     * @param content 内容
     * @param from    发件人
     * @param to      收件人
     */
    public static void sendSimpleMail(String subject, String content, String from, String[] to) {
        try {
            Session session = commonProperties();
            JavaMailSender mailSender =new JavaMailSenderImpl();
            MimeMessage message =mailSender.createMimeMessage();
            MimeMessageHelper helper =new MimeMessageHelper(message,true);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content);
            helper.setFrom(from);
            Transport transport = commonCommit(session);
            transport.sendMessage(message,message.getAllRecipients());
        } catch (Exception e) {
            e.printStackTrace();
        }
        //发送邮件
        //javaMailSender.send(mailMessage);
        Log.info("邮件发送成功,subject:{},form:{},to:{}", subject, from, to);
    }


    /**
     * 图片
     *
     * @param subject
     * @param content 带有html代码
     * @param from
     * @param to
     * @throws MessagingException
     */
    public static void sendHtmlMail(String subject, String content, String from, String[] to) {
        try {
            Session session = commonProperties();
            JavaMailSender javaMailSender=new JavaMailSenderImpl();
            Log.info("要发邮件了!");
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            //是否发送的邮件是富文本(附件,图片,html等)
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "utf-8");
            messageHelper.setFrom(from);
            messageHelper.setTo(to);
            messageHelper.setSubject(subject);
            //重点,默认为false,显示原始html代码,无效果;为true时可识别html代码,有效果
            messageHelper.setText(content, true);
            //发送邮件
            Log.info("发送邮件开始!"+from);
            Transport transport = commonCommit(session);
            transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
        } catch (Exception e) {
            e.printStackTrace();
        }
        //javaMailSender.send(mimeMessage);
        //Log.info("邮件发送成功,subject:{},form:{},to:{},content:{}", subject, from, to, content);
    }



    /**
     * 附件
     *
     * @param subject
     * @param content
     * @param attachmentMap
     * @param from
     * @param to
     * @throws MessagingException
     */
    public static void sendAttachmentMail(String subject, String content, String from, String[] to, Map<String, String> attachmentMap) {
        try {
            Session session = commonProperties();
            JavaMailSender javaMailSender=new JavaMailSenderImpl();
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            //是否发送的邮件是富文本(附件,图片,html等)
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "utf-8");
            messageHelper.setFrom(from);
            messageHelper.setTo(to);
            messageHelper.setSubject(subject);
            //重点,默认为false,显示原始html代码,无效果
            messageHelper.setText(content);
            if (attachmentMap != null) {
                attachmentMap.entrySet().stream().forEach(entrySet -> {
                    try {
                        File file = new File(entrySet.getValue());
                        if (file.exists()) {
                            messageHelper.addAttachment(entrySet.getKey(), new FileSystemResource(file));
                        }
                    } catch (MessagingException e) {
                        e.printStackTrace();
                    }
                });
            }
            Transport transport = commonCommit(session);
            transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
            //发送邮件
            transport.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        Log.info("邮件发送成功,subject:{},form:{},to:{}", subject, from, to);
    }

    /**
     * 附件2------流式发送
     *
     * @param subject
     * @param content
     * @param from
     * @param to
     * @param inputStreamSource
     * @param fileName
     * @throws MessagingException
     */
    public static void sendAttachmentMail2(String subject, String content, String from, String[] to, InputStreamSource inputStreamSource, String fileName) {
        try {
            JavaMailSender javaMailSender=new JavaMailSenderImpl();

            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            //是否发送的邮件是富文本(附件,图片,html等)
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "utf-8");
            messageHelper.setFrom(from);
            messageHelper.setTo(to);
            messageHelper.setSubject(subject);
            //重点,默认为false,显示原始html代码,无效果
            messageHelper.setText(content);
            messageHelper.addAttachment(fileName,inputStreamSource);
            //发送邮件
            javaMailSender.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        Log.info("邮件发送成功,subject:{},form:{},to:{}", subject, from, to);
    }


    public static boolean isEmail(String email) {
        if (null == email || "".equals(email)) {
            return false;
        }
        String regEx1 = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
        Pattern p = Pattern.compile(regEx1);
        Matcher m = p.matcher(email);
        if (m.matches()) {
            return true;
        } else {
            return false;
        }
    }

    @Test
    public void test() throws Exception {
        String msg = "986125495@qq.com";
        System.out.println(isEmail(msg));
        String[] s = {"986125495@qq.com"};
        Map<String,String> map=new HashMap<>();
        map.put("path","D:\\D1-OCR(1).pdf");
        //sendAttachmentMail("测试发送","这是一条测试数据","986125495@qq.com",s,map);
        sendSimpleMail("测试","这是个测试数据","986125495@qq.com",s);
    }


  public static Session commonProperties(){
      Properties instance = getInstance();
      // 2. 根据配置创建会话对象, 用于和邮件服务器交互
      Session session = Session.getDefaultInstance(instance);
      session.setDebug(true);
      return session;
  }

  public static Transport commonCommit(Session session) throws Exception {
      // 4. 根据 Session 获取邮件传输对象
      Transport transport = session.getTransport();

      // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
      //
      //    PS_01: 成败的判断关键在此一句, 如果连接服务器失败, 都会在控制台输出相应失败原因的 log,
      //           仔细查看失败原因, 有些邮箱服务器会返回错误码或查看错误类型的链接, 根据给出的错误
      //           类型到对应邮件服务器的帮助网站上查看具体失败原因。
      //
      //    PS_02: 连接失败的原因通常为以下几点, 仔细检查代码:
      //           (1) 邮箱没有开启 SMTP 服务;
      //           (2) 邮箱密码错误, 例如某些邮箱开启了独立密码;
      //           (3) 邮箱服务器要求必须要使用 SSL 安全连接;
      //           (4) 请求过于频繁或其他原因, 被邮件服务器拒绝服务;
      //           (5) 如果以上几点都确定无误, 到邮件服务器网站查找帮助。
      //
      //    PS_03: 仔细看log, 认真看log, 看懂log, 错误原因都在log已说明。
      transport.connect("XXXXX", "XXXXXX");

      return transport;

  }
}

标签:content,SpringBoot,messageHelper,param,发送,String,邮件,subject
来源: https://blog.csdn.net/PRINTFdfjc/article/details/118966354