SpringBoot--实战开发--Mail邮件(四十九)

一、简介

  发送邮件应该是网站的必备拓展功能之一,注册验证,忘记密码或者是给用户发送营销信息。正常我们会用JavaMail相关api来写发送邮件的相关代码,但现在springboot提供了一套更简易使用的封装。SpringBoot实现邮件功能是非常的方便快捷的,因为SpringBoot默认有starter实现了Mail。
基本协议:
SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP认证要求必须提供账号和密码才能登陆服务器,其设计目的在于避免用户受到垃圾邮件的侵扰。
IMAP全称为Internet Message Access Protocol(互联网邮件访问协议),IMAP允许从邮件服务器上获取邮件的信息、下载邮件等。IMAP与POP类似,都是一种邮件获取协议。
POP3全称为Post Office Protocol 3(邮局协议),POP3支持客户端远程管理服务器端的邮件。POP3常用于“离线”邮件处理,即允许客户端下载服务器邮件,然后服务器上的邮件将会被删除。目前很多POP3的邮件服务器只提供下载邮件功能,服务器本身并不删除邮件,这种属于改进版的POP3协议。
IMAP和POP3协议区别?
两者最大的区别在于,IMAP允许双向通信,即在客户端的操作会反馈到服务器上,例如在客户端收取邮件、标记已读等操作,服务器会跟着同步这些操作。而对于POP协议虽然也允许客户端下载服务器邮件,但是在客户端的操作并不会同步到服务器上面的,例如在客户端收取或标记已读邮件,服务器不会同步这些操作。

二、Maven依赖

<!--email-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

三、配置

# JavaMailSender 邮件发送的配置(qq邮箱的配置)
spring.mail.host=smtp.qq.com
spring.mail.username=用户qq邮箱
#QQ邮箱的授权码
spring.mail.password=授权码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.default-encoding=UTF-8

在QQ邮箱获取授权码,授权码不是密码。


获取授权码

获取授权码

四、简单邮件

    @Autowired
    private JavaMailSenderImpl mailSender;//注入邮件工具类

    @Test
    public void sendMail(){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        //邮件发送人
        simpleMailMessage.setFrom("xxx@qq.com");
        //邮件接收人
        simpleMailMessage.setTo("xxxx@163.com");
        //邮件主题
        simpleMailMessage.setSubject("测试");
        //邮件内容
        simpleMailMessage.setText("邮件发送测试");
        mailSender.send(simpleMailMessage);
    }
测试结果

五、复杂邮件

1.MimeMessage:该类是个能理解MIME类型和头的电子邮件消息
2.MimeMultipart:该类定义了增加、删除以及获取邮件不同部分内容的方法
3.MimeBodyPart:该对象代表一个MimeMessage对象内容的一部分。每个MimeBodyPart被认为有两部分:MIME类型和匹配这个类型的内容。
附件目录:


附件目录
  1. 发送测试
    @Autowired
    private JavaMailSenderImpl mailSender;//注入邮件工具类

    @Test
    public void sendMail(){
        String path = this.getClass().getClassLoader().getResource("./").getPath();
        // TODO 1. 创建Message
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        try {
            // TODO 2.设置收信人
            mimeMessage.addRecipients(Message.RecipientType.TO, "houjianjun88@163.com");
            // 抄送
//            mimeMessage.addRecipients(Message.RecipientType.CC, "xxxxx@qq.com");
            mimeMessage.setFrom("474177818@qq.com");    // 邮件发送人
            mimeMessage.setSubject("测试邮件主题");       // 邮件主题
            // TODO 3. 添加附件
            // 设置整封邮件的MIME消息体为混合的组合关系
            MimeMultipart mixed = new MimeMultipart("mixed");
            mimeMessage.setContent(mixed);

            MimeBodyPart attach1 = new MimeBodyPart();  // 创建附件1
            MimeBodyPart attach2 = new MimeBodyPart();  // 创建附件2
            MimeBodyPart content = new MimeBodyPart();  // 创建邮件正文

            mixed.addBodyPart(attach1);// 将附件一添加到MIME消息体中
            mixed.addBodyPart(attach2);// 将附件二添加到MIME消息体中
            mixed.addBodyPart(content);// 将正文添加到消息体中

            FileDataSource fds1 = new FileDataSource(new File(path+"/images/001.png"));//构造附件一的数据源
            DataHandler dh1 = new DataHandler(fds1);// 数据处理
            attach1.setDataHandler(dh1);   // 设置附件一的数据源
            attach1.setFileName("001.png");// 设置附件一的文件名

            // 附件二的操作与附件一类似,这里就不一一注释了
            FileDataSource fds2 = new FileDataSource(new File(path+"/images/项目测评表(1).xlsx"));
            DataHandler dh2 = new DataHandler(fds2);
            attach2.setDataHandler(dh2);
            // 设置文件名时,如果有中文,可以通过MimeUtility类中的encodeText方法进行编码,避免乱码
            attach2.setFileName(MimeUtility.encodeText("项目测评表.xlsx"));
            // 设置正文的MIME类型
            MimeMultipart bodyMimeMultipart = new MimeMultipart("related");
            // 将bodyMimeMultipart添加到正文消息体中
            content.setContent(bodyMimeMultipart);
            // 正文的HTML部分
            MimeBodyPart bodyPart = new MimeBodyPart();
            bodyPart.setContent("<h1>Hello大家好,这是一封测试邮件<img src='cid:002.jpeg'/></h1>","text/html;charset=utf-8");

            MimeBodyPart picPart = new MimeBodyPart();//正文的图片部分
            DataHandler dataHandler = new DataHandler(new FileDataSource(path+"/images/002.jpeg"));
            picPart.setDataHandler(dataHandler);
            picPart.setContentID("002.jpeg");

           // 将正文的HTML和图片部分分别添加到bodyMimeMultipart中
            bodyMimeMultipart.addBodyPart(bodyPart);
            bodyMimeMultipart.addBodyPart(picPart);
            // 保存消息
            mimeMessage.saveChanges();
            mailSender.send(mimeMessage);
        } catch (MessagingException | UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }

  1. 测试结果


    测试结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容