SpringBoot企业开发: 邮件发送

一般企业开发包含:

  • 邮件发送
  • 定时任务
  • 批处理
  • Swagger2
  • 数据校验

准备:

邮件发送常用于注册时的身份认证、重要通知等。Sun公司提供了JavaMail来实现邮件发送,但是配置繁琐。

Spring:提供了JavaMailSender

SpringBoot: 提供了MailSenderAutoConfiguration

需要做的准备:

  • 登录QQ邮箱,找到账户:

  • 找到POP3/SMTP服务,点击“开启”

我这里已经开启过,第一次开启需要按照提示发送短信获取授权码,拿到授权码后,准备工作就完成了。

这里的授权码在后面的代码配置处有用,如果忘记了可以点击“生成授权码”

 此步骤会让 你发送短信,然后点击“已发送”,就可以获得上图的授权码。保存授权码,等哈会使用。


SpringBoot整合QQ邮箱:

 1.新建项目,并添加邮件依赖:

扫描二维码关注公众号,回复: 10085068 查看本文章

2. 添加邮件的基本配置信息:

SSL配置可以查看QQ邮箱的帮助中心。

3.发送简单的邮件:

3.1 封装邮件的发送;

package com.yinlei.qqemail;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;

@Component
public class MailService {
    /**
     * JavaMailSender是springboot在MailSenderPropertiesConfiguration中配置号的,
     * 在Mail自动配置类MailSenderAutoConfiguration中导入。
     */
    @Autowired
    JavaMailSender javaMailSender;

    /**
     *
     * @param from 邮件发送者
     * @param to 收件人
     * @param cc 抄送人
     * @param subject 邮件主题
     * @param content 邮件内容
     */
    public void sendSimpleMail(String from,String to,String cc,String subject,String content){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(from);
        simpleMailMessage.setTo(to);
        simpleMailMessage.setCc(cc);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        javaMailSender.send(simpleMailMessage);
    }
}

3.2 测试发送:

4.发送带附件的邮件:【调用Attachment添加附件,调用多次可以添加多个附件】

只需要在上面的MailService.java中添加一个方法:

package com.yinlei.qqemail;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

@Component
public class MailService {
    /**
     * JavaMailSender是springboot在MailSenderPropertiesConfiguration中配置号的,
     * 在Mail自动配置类MailSenderAutoConfiguration中导入。
     */
    @Autowired
    JavaMailSender javaMailSender;

    /**
     *
     * @param from 邮件发送者
     * @param to 收件人
     * @param cc 抄送人
     * @param subject 邮件主题
     * @param content 邮件内容
     */
    public void sendSimpleMail(String from,String to,String cc,String subject,String content){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(from);
        simpleMailMessage.setTo(to);
        simpleMailMessage.setCc(cc);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        javaMailSender.send(simpleMailMessage);
    }


    /**
     * 发送带附件的邮件
     * @param from 
     * @param to
     * @param subject
     * @param content
     * @param file
     */
    public void sendAttachFileMail(String from, String to, String subject, String content, File file){
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            //参数2表示构造一个multipart message类型的邮件,multipart message类新的的邮件包含多个正文、附件、内嵌资源
            MimeMessageHelper helper = new MimeMessageHelper(message,true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content);
            //添加附件
            helper.addAttachment(file.getName(),file);
            javaMailSender.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

测试发送:

5.发送带图片资源的邮件:

当邮件的正文内容需要插入图片的时候,可以使用FileSystemResource实现:

package com.yinlei.qqemail;

import org.springframework.beans.factory.annotation.Autowired;
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.Component;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

@Component
public class MailService {
    /**
     * JavaMailSender是springboot在MailSenderPropertiesConfiguration中配置号的,
     * 在Mail自动配置类MailSenderAutoConfiguration中导入。
     */
    @Autowired
    JavaMailSender javaMailSender;

    /**
     *
     * @param from 邮件发送者
     * @param to 收件人
     * @param cc 抄送人
     * @param subject 邮件主题
     * @param content 邮件内容
     */
    public void sendSimpleMail(String from,String to,String cc,String subject,String content){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(from);
        simpleMailMessage.setTo(to);
        simpleMailMessage.setCc(cc);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        javaMailSender.send(simpleMailMessage);
    }


    /**
     * 发送带附件的邮件
     * @param from
     * @param to
     * @param subject
     * @param content
     * @param file
     */
    public void sendAttachFileMail(String from, String to, String subject, String content, File file){
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            //参数2表示构造一个multipart message类型的邮件,multipart message类新的的邮件包含多个正文、附件、内嵌资源
            MimeMessageHelper helper = new MimeMessageHelper(message,true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content);
            //添加附件
            helper.addAttachment(file.getName(),file);
            javaMailSender.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }


    /**
     * 发送带图片资源的邮件
     * @param srcPath 图片资源路径
     * @param resIds 资源id
     */
    public void sendMailWithImg(String from, String to, String subject, String content,String[] srcPath,String[] resIds){
        if (srcPath.length!=resIds.length){
            System.out.println("发送失败");
            return;
        }
        try{
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message,true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content,true);//参数true表示邮件正文是html格式,不传默认是false
            for (int i=0;i<srcPath.length;i++){
                FileSystemResource res = new FileSystemResource(new File(srcPath[i]));//构造静态资源
                helper.addInline(resIds[i],res);//将资源添加到邮件对象
            }
            javaMailSender.send(message);
        } catch (MessagingException e) {
            System.out.println("发送失败");
        }
    }
}

6.使用模板引擎构建邮件模板(FreeMarker或Thymeleaf)

这里以Thymeleaf演示:

6.1 添加依赖:

6.2创建模板:

package com.yinlei.qqemail;

import org.springframework.beans.factory.annotation.Autowired;
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.Component;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

@Component
public class MailService {
    /**
     * JavaMailSender是springboot在MailSenderPropertiesConfiguration中配置号的,
     * 在Mail自动配置类MailSenderAutoConfiguration中导入。
     */
    @Autowired
    JavaMailSender javaMailSender;

    /**
     *
     * @param from 邮件发送者
     * @param to 收件人
     * @param cc 抄送人
     * @param subject 邮件主题
     * @param content 邮件内容
     */
    public void sendSimpleMail(String from,String to,String cc,String subject,String content){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(from);
        simpleMailMessage.setTo(to);
        simpleMailMessage.setCc(cc);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        javaMailSender.send(simpleMailMessage);
    }


    /**
     * 发送带附件的邮件
     * @param from
     * @param to
     * @param subject
     * @param content
     * @param file
     */
    public void sendAttachFileMail(String from, String to, String subject, String content, File file){
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            //参数2表示构造一个multipart message类型的邮件,multipart message类新的的邮件包含多个正文、附件、内嵌资源
            MimeMessageHelper helper = new MimeMessageHelper(message,true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content);
            //添加附件
            helper.addAttachment(file.getName(),file);
            javaMailSender.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }


    /**
     * 发送带图片资源的邮件
     * @param srcPath 图片资源路径
     * @param resIds 资源id
     */
    public void sendMailWithImg(String from, String to, String subject, String content,String[] srcPath,String[] resIds){
        if (srcPath.length!=resIds.length){
            System.out.println("发送失败");
            return;
        }
        try{
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message,true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content,true);//参数true表示邮件正文是html格式,不传默认是false
            for (int i=0;i<srcPath.length;i++){
                FileSystemResource res = new FileSystemResource(new File(srcPath[i]));//构造静态资源
                helper.addInline(resIds[i],res);//将资源添加到邮件对象
            }
            javaMailSender.send(message);
        } catch (MessagingException e) {
            System.out.println("发送失败");
        }
    }

    /**
     * 使用模板引擎
     */
    public void sendHtmlMail(String from ,String to,String subject,String content){
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message,true);
            helper.setTo(to);
            helper.setFrom(from);
            helper.setSubject(subject);
            helper.setText(content,true);
            javaMailSender.send(message);
        } catch (MessagingException e) {
            System.out.println("发送失败");
        }


    }
}

发布了356 篇原创文章 · 获赞 67 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/qq_39969226/article/details/105005567