SpringBoot+JavaMailSender发送邮件

SpringBoot+JavaMailSender发送邮件

概述
spring提供了发送邮件的接口JavaMailSender,通过JavaMailSender可以实现后端发送邮件,并且可以根据不同业务需求,利用JavaMailSender定制化发送邮件工具。spring boot +JavaMailSender接口发送邮件步骤如下

1、在pom.xml中引入spring-boot-starter-mail依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        

2、如果需要通过模板化发送邮件,则还需要引入spring-boot-starter-freemarker,通过freemarker来生成邮件模板

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

3、编写邮件发送类mailUtils(注意要使用@component标签),注入JavaMailSender,以及邮件模板freemarker bean,配置邮件发送方以及相关的STMP配置

    @Value("${spring.mail.username}")
    private String fromMail;
    private final JavaMailSender sender;
    private final FreeMarkerConfigurer freeMarkerConfigurer;
 @Autowired
 private JavaMailSender mailSender;
或者在同一初始化配置里创建JavaMailSender bean,再通过SpringContextUtils.getBean("mailSender") (mailSender为beanName)获取,本文通过第二种方式

MailUtils的sendMsg()方法实现通用邮件发送接口
这四个参数必须有
* @param mail 邮箱,支持多个
* @param subject 邮件主题
* @param title 邮件标题
* @param paragraph 段落内容,

    public void SendMsg(String es_receiver, String es_title, String es_content) {
        JavaMailSender mailSender = (JavaMailSender) SpringContextUtils.getBean("mailSender");
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = null;
        //update-begin-author:taoyan date:20200811 for:配置类数据获取
        if(oConvertUtils.isEmpty(emailFrom)){
            StaticConfig staticConfig = SpringContextUtils.getBean(StaticConfig.class);
            setEmailFrom(staticConfig.getEmailFrom());
        }
        //update-end-author:taoyan date:20200811 for:配置类数据获取
        try {
            helper = new MimeMessageHelper(message, true);
            // 设置发送方邮箱地址
            helper.setFrom(emailFrom);
            helper.setTo(es_receiver);
            helper.setSubject(es_title);
            helper.setText(es_content, true);
            mailSender.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

原理解析:要使用JavaMailSender发送邮件,
1、必须先获取JavaMailSender bean,

JavaMailSender mailSender = (JavaMailSender) SpringContextUtils.getBean("mailSender");

2、mailSender 创建MimeMessage实例,

 message = mailSender.createMimeMessage();
 

3、通过MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true)封装邮件元数据信息;

 helper.setFrom(emailFrom);
 helper.setTo(es_receiver);
 helper.setSubject(es_title);
 helper.setText(es_content, true);

4、通过mailSender 的send方法发送邮件

 mailSender.send(message);

通过模板发送邮件

1、发送文本文件

    /**
     * 发送文本邮件
     * @param to      收件人
     * @param subject 标题
     * @param content 正文
     */
    public void sendSimpleMail(String[] to, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        //发件人
        message.setFrom(fromMail);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(content);
        sender.send(message);
    }

2、发送html邮件

	    /**
     * 发送html邮件,带抄送功能
     * @param to
     * @param cc
     * @param subject
     * @param content
     */
    public void sendHtmlMail(String[] to, String[] cc, String subject, String content) {
        try {
            //注意这里使用的是MimeMessage
            MimeMessage message = sender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(fromMail);
            helper.setTo(to);
            // 抄送
            if (ArrayUtils.isNotEmpty(cc)) {
                helper.setCc(cc);
            }
            helper.setSubject(subject);
            //第二个参数:格式是否为html
            helper.setText(content, true);
            sender.send(message);
        }catch (MessagingException e){
            log.error("发送邮件时发生异常!", e);
        }
    }

3、发送带附件的邮件

	    /**
     * 发送带附件的邮件
     * @param to
     * @param subject
     * @param content
     * @param filePath
     */
    public void sendAttachmentsMail(String to, String subject, String content, String filePath) {
        try {
            MimeMessage message = sender.createMimeMessage();
            //要带附件第二个参数设为true
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(fromMail);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);

            FileSystemResource file = new FileSystemResource(new File(filePath));
            String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
            helper.addAttachment(fileName, file);
            sender.send(message);
        }catch (MessagingException e){
            log.error("发送邮件时发生异常!", e);
        }
    }

4、发送模板邮件

    /**
     * 发送模板邮件
     *
     * @param to
     * @param subject
     * @param template
     * @param model    使用Map作为数据模型,定义属性和值
     */
    public void sendTemplateMail(String[] to, String[] cc, String subject, String template, Map<String, Object> model) {
        try {
            // 获得模板
            Template freeMarkerTemplate = freeMarkerConfigurer.getConfiguration().getTemplate(template);
            // 传入数据模型到模板,替代模板中的占位符,并将模板转化为html字符串
            String templateHtml = FreeMarkerTemplateUtils.processTemplateIntoString(freeMarkerTemplate, model);
            // 该方法本质上还是发送html邮件,调用之前发送html邮件的方法
                    try {
            //注意这里使用的是MimeMessage
            MimeMessage message = sender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(fromMail);
            helper.setTo(to);
            // 抄送
            if (ArrayUtils.isNotEmpty(cc)) {
                helper.setCc(cc);
            }
            helper.setSubject(subject);
            //第二个参数:格式是否为html
            helper.setText(templateHtml , true);
            sender.send(message);
        }catch (MessagingException e){
            log.error("发送邮件时发生异常!", e);
        }
    }

5、发送静态资源的邮件

public void sendMail() throws MessagingException {
		MimeMessage mimeMessage = mailSender.createMimeMessage();
		MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
		
		helper.setFrom("so****@163.com");
		helper.setTo("239****@qq.com");
		helper.setSubject("主题:嵌入静态资源");
		helper.setText("<html><body><img src=\"cid:hello\" ></body></html>", true);     
		
		// 注意addInline()中资源名称 hello 必须与 text正文中cid:hello对应起来
		FileSystemResource file1 = new FileSystemResource(new File("d:\\cat.jpg"));
		helper.addInline("hello", file1);
		try {
		    mailSender.send(mimeMessage);
		    logger.info("嵌入静态资源的邮件已发送。");
		} catch (Exception e) {
		    logger.error("静态资源的邮件时发生异常了!", e);
	 }
 }

猜你喜欢

转载自blog.csdn.net/Tomcat_king/article/details/118080787
今日推荐