spring boot利用JavaMail发送163邮件以及HTML类型邮件

spring boot系列 专栏收录该内容
1 篇文章 0 订阅

引入依赖

<!-- 邮件发送支持 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
			<version>1.5.9.RELEASE</version>
		</dependency>

本身Javamail自带配置类,所以只需要配置yml文件即可

self:
  system:
    templateurl: E:\txtttt.html
    savePath: E:\save.html

spring:
  mail:
    # 邮件服务地址
    host: smtp.163.com
    # 端口,可不写默认
    port: 25
    # 编码格式
    default-encoding: utf-8
    # 用户名
    username: xxx@163.com
    # 授权码
    password: xxxx
    addr: xxxx@163.com
    # 其它参数
    properties:
      mail:
      smtp:
        # 如果是用 SSL 方式,需要配置如下属性,使用qq邮箱的话需要开启
        ssl:
        enable: true
        required: true
        # 邮件接收时间的限制,单位毫秒
        timeout: 10000
        # 连接时间的限制,单位毫秒
        connectiontimeout: 10000
        # 邮件发送时间的限制,单位毫秒
        writetimeout: 10000

接口

import java.util.Map;

/**
 * 邮件发送接口
 * @Author: yangchangliang
 * @Date: 2020-11-18 8:45
 * @Version: 1
 */
public interface MailSendService {
    /**
     * 发送普通邮件
     *
     * @param to  收件人
     * @param subject 主题
     * @param content 内容
     */
    void sendSimpleMail(String to, String subject, String content);
    /**
     * 发送 HTML 邮件
     *
     * @param to  收件人
     * @param subject 主题
     * @param content 内容
     */
    void sendHtmlMail(String to, String subject, String content);
    /**
     * 发送带附件的邮件
     *
     * @param to  收件人
     * @param subject 主题
     * @param content 内容
     * @param filePath 附件路径
     */
    void sendAttachmentsMail(String to, String subject, String content, String filePath);
    /**
     * 发送带静态文件的邮件
     *
     * @param to  收件人
     * @param subject 主题
     * @param content 内容
     * @param rscIdMap 需要替换的静态文件
     */
    void sendMimeMessage(String to, String subject, String content, Map<String, String> rscIdMap);

    /**
     * 从本地构建HTML发送到邮箱
     */
    void sendMail();


    /**
     * 替换内容
     */
    void changeContent();
}

实现类


import com.gzaisino.project.email.service.MailSendService;
import com.gzaisino.project.email.util.CombinationTemplate;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * 邮件发送实现类
 * @Author: yangchangliang
 * @Date: 2020-11-18 8:46
 * @Version: 1
 */
@Service
public class MailSendServiceImpl implements MailSendService {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    @Autowired
    private JavaMailSender mailSender;
    @Value("${spring.mail.addr}")
    private String from;
    @Value("${self.system.templateurl}")
    private String templateurl;
    @Value("${self.system.savePath}")
    private String savePath;


    /**
     * 发送普通邮件
     *
     * @param to  收件人
     * @param subject 主题
     * @param content 内容
     */
    @Override
    public void sendSimpleMail(String to, String subject, String content) {
        try{
            SimpleMailMessage simpleMailMessage= new SimpleMailMessage();
            simpleMailMessage.setFrom(from);
            simpleMailMessage.setTo(to);
            simpleMailMessage.setSubject(subject);
            simpleMailMessage.setText(content);
            mailSender.send(simpleMailMessage);
            logger.info("邮件已发送成功!");
        } catch (Exception e) {
            logger.error("发送邮件时发生异常!",e);
        }
    }

    /**
     * 发送 HTML 邮件
     *模板
     * @param to  收件人
     * @param subject 主题
     * @param content 内容
     */
    @Override
    public void sendHtmlMail(String to, String subject, String content) {
        MimeMessage message = mailSender.createMimeMessage();
        try {
            //这里的true表示需要创建一个multipart message
            MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
            messageHelper.setFrom(from);
            messageHelper.setTo(to);
            messageHelper.setSubject(subject);
            messageHelper.setText(content,true);
            mailSender.send(message);
            logger.info("邮件发送成功! ");
        } catch (MessagingException e) {
            logger.error("发送邮件时发生异常!", e);
        }
    }

    /**
     * 发送带附件的邮件
     *
     * @param to  收件人
     * @param subject 主题
     * @param content 内容
     * @param filePath 附件路径
     */
    @Override
    public void sendAttachmentsMail(String to, String subject, String content, String filePath){
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(message, true);
            mimeMessageHelper.setFrom(from);
            mimeMessageHelper.setTo(to);
            mimeMessageHelper.setSubject(subject);
            mimeMessageHelper.setText(content,true);

            FileSystemResource fileSystemResource = new FileSystemResource(new File(filePath));
            String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
            mimeMessageHelper.addAttachment(fileName,fileSystemResource);

            mailSender.send(message);
            logger.info("邮件已经发送成功! ");
        } catch (MessagingException e) {
            logger.error("发送邮件时发生异常!", e);
        }
    }
    /**
     * 发送带静态文件的邮件
     *
     * @param to  收件人
     * @param subject 主题
     * @param content 内容
     * @param rscIdMap 需要替换的静态文件
     */
    @Override
    public void sendMimeMessage(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(from);
            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);
        }
    }

    /**


    /**
     * 读取HTML文件并替换其中的特定内容,然后保存文件
     */
    @Override
    public void changeContent() {
        // filePath 要读取的文件 savePath 要写入的文件
        BufferedWriter bw = null;
        try {
            // 以下读取和写入都转成UTF-8 防止乱码
            String txt2String = CombinationTemplate.txt2String(new File(templateurl));
            bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(savePath), StandardCharsets.UTF_8));
            if (StringUtils.isNotBlank((txt2String))) {
                bw.write(txt2String.replace("{kprq}","可配置")
                        .replace("{xfmc}","可配置")
                        .replace("{jehj}","可配置")
                        .replace("{fpdm}","可配置")
                        .replace("{fphm}","可配置")
                        .replace("{fpxzdz}","可配置"));
            }
            bw.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bw != null){
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

工具类


import org.springframework.stereotype.Component;
import java.io.*;
import java.util.Objects;


/**
 * 组合HTML模板
 *
 * @Author: yangchangliang
 * @Date: 2020-11-18 15:37
 * @Version: 1
 */
@Component
public class CombinationTemplate {
    /**
     * 读取html文件的内容
     * @param file 想要读取的文件对象
     * @return 返回文件内容
     */
    public static String txt2String(File file){
        StringBuilder result = new StringBuilder();
        BufferedReader br = null;
        try{
            //构造一个BufferedReader类来读取文件
             br = new BufferedReader(new FileReader(file));
            String s;
            //使用readLine方法,一次读一行
            while((s = br.readLine())!=null){
                result.append(System.lineSeparator()).append(s);
            }
            br.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        finally {
            if (Objects.nonNull(br)){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result.toString();
    }

}

效果图如下

在这里插入图片描述

个人spring cloud开源脚手架

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值