美文网首页spring boot
spring boot 邮件发送基础详解(4种邮件超级详细)

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

作者: X兄 | 来源:发表于2019-04-18 22:47 被阅读0次

    本文将介绍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;
        }
    

    成功:


    图片邮件通知

    邮件内容:


    内容

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

    相关文章

      网友评论

        本文标题:spring boot 邮件发送基础详解(4种邮件超级详细)

        本文链接:https://www.haomeiwen.com/subject/vbjxgqtx.html