spring boot 邮件发送基础详解(4种邮件超级详细)

本文将介绍spring boot邮件发送
将介绍以下几个方面:

  1. 邮件使用场景
  2. 邮件发送原理
  3. 邮件发送流程
  4. 邮件发送步骤

1. 邮件发送使用场景:

  • 注册验证 注册各种账户
  • 网站营销 给邮件发送邮件广告
  • 身份安全验证 验证你的身份修改密码
  • 提醒 监控告警
  • 工作邮件

2. 邮件发送原理:

  • 邮件传输协议: SMTP协议和POP3协议
    SMTP协议:
    简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 是在Internet传输email的事实标准。
    SMTP是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。可以很简单地通过telnet程序来测试一个SMTP服务器。SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX (Mail eXchange) DNS。
    POP3协议
    POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。

后来又出现了:

  • IMAP协议(对Pop3协议的补充)和Mime协议

3. 邮件发送流程:

spring boot 邮件发送基础详解(4种邮件超级详细)_第1张图片
image.png

4. 邮件发送实战步骤:

  • 第一步首先是创建一个简单的spring boot项目,你可以到官网spring boot去生成一个简单的项目,然后用IDEA开发工具导入,也可以直接在IDEA中新建一个spring boot项目.

这里以QQ邮箱为例子进行简单的邮件发送:

  • 在pom.xml中引入依赖:
  
    org.springframework.boot
    spring-boot-starter-mail
 
  • 在application.yml中配置邮箱参数:
spring:
      mail:
        host: smtp.qq.com
        username: [email protected]  #发送方的邮箱
        password: xxxxxxxxxx  # 设置密码,该处的密码是发送方QQ邮箱开启SMTP的授权码而非QQ密码 

那么如何开启QQ邮箱的授权码呢?

  • 打开QQ邮箱,设置-->账户-->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务-->打开下图我标出的服务:


    spring boot 邮件发送基础详解(4种邮件超级详细)_第2张图片
    开启授权码
  • 创建一个类SendEmailService :
@Service
public class SendEmailService {
    @Autowired
    JavaMailSender jms;

    public String send(String sender,String receiver,String title,String text){
        //建立邮件消息
        SimpleMailMessage mainMessage = new SimpleMailMessage();
        //发送方
        mainMessage.setFrom(sender);
        //接收方
        mainMessage.setTo(receiver);
        //发送的标题
        mainMessage.setSubject(title);
        //发送的内容
        mainMessage.setText(text);
        jms.send(mainMessage);
        return "success";
    }
}

然后创建一个controller:

@RestController
public class mail {
    @Autowired
    private SendEmailService sendEmailService;

    @GetMapping("/send")
    public String send(){

        String sender="[email protected]";   //这个是发送人的邮箱
        String receiver="[email protected]";  //这个是接受人的邮箱
        String title="66万漏油奔驰";    //标题
        String text="【坐在引擎盖上哭】“ 66万买辆奔驰,还没开出店门就漏油,请问这种车去哪里买呢,我也想要一辆。";

        String result=sendEmailService.send(sender, receiver, title, text);
        return result;
    }
}

这样,一个简单的邮件发送步骤就结束了,现在启动项目服务,运行代码,检测是否成功!
成功截图:

success

spring boot 邮件发送基础详解(4种邮件超级详细)_第3张图片
通知
spring boot 邮件发送基础详解(4种邮件超级详细)_第4张图片
邮件详情

可以看出,已经成功了,是不是很简单!

发送html模板邮件:

同样,我们在刚才的SendEmailService下再写一个发送html的方法:

public String sendHtml(String sender,String receiver,String subject, String content) throws MessagingException {
        MimeMessage message = jms.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message,true);
        //发送方
        helper.setFrom(sender);
        //接收方
        helper.setTo(receiver);
        //邮件主题
        helper.setSubject(subject);
        //邮件内容
        helper.setText(content,true);
        jms.send(message);
        return "sendHtml success";
    }

然后在刚才的controller中进行测试:

/**
     * HTML邮件发送
     * @return
     */
    @RequestMapping("/htmlEmail")
    public String sendHtml() throws MessagingException {
        String content = "\n"+
                "\n"+
                "

这是一封有历史意义的HTML邮件,请注意查收!!!

\n"+ "\n"+ ""; String html = sendEmailService.sendHtml(sender,receiver,title,content); return html; }

开启tomcat服务,输入http://localhost:8080/htmlEmail,结果为:

success

邮件弹出的通知:


spring boot 邮件发送基础详解(4种邮件超级详细)_第5张图片
通知

邮件内容:


spring boot 邮件发送基础详解(4种邮件超级详细)_第6张图片
i内容

含有附件的邮件发送:

同样,我们在刚才的SendEmailService下再写一个发送含有附件邮件的方法:

/**
     * 发送含有附件的邮件
     * @param sender
     * @param receiver
     * @param subject
     * @param content
     * @param filePath
     * @return
     * @throws MessagingException
     */
    public String sendAttachment(String sender,String receiver,String subject, String content, String filePath) throws MessagingException {
        MimeMessage message = jms.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message,true);
        //发送方
        helper.setFrom(sender);
        //接收方
        helper.setTo(receiver);
        //邮件主题
        helper.setSubject(subject);
        //邮件内容
        helper.setText(content,true);
        //邮件的附件
        FileSystemResource file = new FileSystemResource(new File(filePath));
        //获取附件的文件名
        String fileName = file.getFilename();
        helper.addAttachment(fileName,file);
        jms.send(message);
        return "sendAttachment success";
    }

然后在刚才的controller中进行测试:

/**
     * 含有附件的邮件发送
     * @return
     * @throws MessagingException
     */
    @RequestMapping("/attachment")
    public String sendAttachment() throws MessagingException {
        String filePath = "E:\\IDEA使用方法\\yml知识.txt";
        String content = "我的这封邮件可是很厉害的,因为它可以带附件呦!!!";
        String attachment = sendEmailService.sendAttachment(sender,receiver,title,content,filePath);
        return attachment;
    }

结果:

spring boot 邮件发送基础详解(4种邮件超级详细)_第7张图片
邮件通知

邮件内容:


spring boot 邮件发送基础详解(4种邮件超级详细)_第8张图片
内容

含有图片的邮件发送:

同样,我们在刚才的SendEmailService下再写一个发送含有图片邮件的方法:

 /**
     * 含有图片的邮件
     * @param sender
     * @param receiver
     * @param subject
     * @param content
     * @param picPath
     * @param picId
     * @return
     * @throws MessagingException
     */
    public String sendPicture(String sender,String receiver,String subject, String content,
                              String picPath,String picId) throws MessagingException {
        MimeMessage message = jms.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message,true);
        //发送方
        helper.setFrom(sender);
        //接收方
        helper.setTo(receiver);
        //邮件主题
        helper.setSubject(subject);
        //邮件内容
        helper.setText(content,true);
        //邮件的图片
        FileSystemResource file = new FileSystemResource(new File(picPath));
        helper.addInline(picId,file);
        jms.send(message);
        return "sendPicture success";
    }

然后在刚才的controller中进行测试:

/**
     * 含有图片的邮件
     * @return
     * @throws MessagingException
     */
    @RequestMapping("/picture")
    public String sendPicture() throws MessagingException {
        String picPath = "C:\\Users\\asus\\Downloads\\壁纸\\全军.jpg";
        String picId = "PIC001";
        String content = "我的这封邮件可是很厉害的,因为它可以显示图片呦!!!\n" +
                "";
        String picture = sendEmailService.sendPicture(sender,receiver,title,content,picPath,picId);
        return picture;
    }

成功:


spring boot 邮件发送基础详解(4种邮件超级详细)_第9张图片
图片邮件通知

邮件内容:


内容

怎么样,喜欢的话,麻烦帅哥们点个赞可以吗?

你可能感兴趣的:(spring boot 邮件发送基础详解(4种邮件超级详细))