使用spring maill发送邮件

使用spring maill发送邮件

三种不同内容及附件

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

三种方式基本配置

1、在pom文件中添加:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2、配置文件:
application.properties:

#thymeleaf
spring.thymeleaf.mode=HTML
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=classpath:/templates/
#mail
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.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.com
spring.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<Map<String, String>> 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<String, String> 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("<h3><a href='http://www.baidu.com'>百度一下,你就知道</a></h3>");
        //设置是否为Html格式
        emailBo.setHtml(true);
        //设置附件集合(可采用List<Map>方式设置多个)
        List<Map<String, String>> maps = new ArrayList<>();
        Map<String, String> map1 = new TreeMap<>();
        map1.put("filePath",EmailConf.FILE_PATH);
        map1.put("fileName",EmailConf.FILE_NAME);
        maps.add(map1);
        Map<String, String> map2 = new TreeMap<>();
        map2.put("filePath",EmailConf.FILE_PATH2);
        map2.put("fileName",EmailConf.FILE_NAME2);
        maps.add(map2);
        //设置附件集合(可采用List<Map>方式设置多个)
        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包:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

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

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
您好,这是验证邮件,请点击下面的链接完成验证,<br/>
<a th:href="@{${href}}">激活账号</a>
</body>
</html>

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

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

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值