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. 邮件发送流程:

image.png

4. 邮件发送实战步骤:

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

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

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

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

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


    开启授权码
  • 创建一个类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="846973430@qq.com";   //这个是发送人的邮箱
        String receiver="943088439@qq.com";  //这个是接受人的邮箱
        String title="66万漏油奔驰";    //标题
        String text="【坐在引擎盖上哭】“ 66万买辆奔驰,还没开出店门就漏油,请问这种车去哪里买呢,我也想要一辆。";

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

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

success

通知
邮件详情

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

发送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 = "<html>\n"+
                "<body>\n"+
                "<h2>这是一封有历史意义的HTML邮件,请注意查收!!!</h2>\n"+
                "</body>\n"+
                "</html>";
        String html = sendEmailService.sendHtml(sender,receiver,title,content);
        return html;
        }

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

success

邮件弹出的通知:


通知

邮件内容:


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;
    }

结果:

邮件通知

邮件内容:


内容

含有图片的邮件发送:

同样,我们在刚才的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 = "<html><body>我的这封邮件可是很厉害的,因为它可以显示图片呦!!!\n" +
                "<img src=\'cid:"+picId+"\'></img></body></html>";
        String picture = sendEmailService.sendPicture(sender,receiver,title,content,picPath,picId);
        return picture;
    }

成功:


图片邮件通知

邮件内容:


内容

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容