SpringBoot实现邮件发送

发送前准备

使用QQ邮箱发送邮件,首先要申请开通POP3/SMTP服务或者IMAP/SMTP服务。SMTP为简单邮件传输协议,它定义了邮件客户端软件与SMTP服务器之间,以及SMTP服务器与SMTP服务器之间的通信规则。也就是说,xxx@qq.com 用户先将邮件投递到腾讯的SMTP服务器,这个过程就使用了SMTP协议,然后腾讯的SMTP服务器就将邮件投递到网易的SMTP服务器,这个过程依旧使用了SMTP协议,SMTP服务器就是用来接收邮件的。而POP3是邮局协议,它定义了邮件客户端与POP3服务器之间的通信规则。

下面介绍QQ邮箱开通POP3/SMTP服务的步骤:
1、登录QQ邮箱,依次单击顶部的设置按钮和账号按钮。
在这里插入图片描述
2、在账户选项卡下方找到POP3/SMTP服务,单击后方的“开启”按钮。
在这里插入图片描述
3、单击开始按钮后,通过引导步骤发送短信,操作成功后,会获取一个授权码。拿到授权码后,准备工作就完成了。

发送

1、环境搭建

使用SpringBoot发送邮件,首先导入依赖:

		<!-- 发送邮箱的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

项目创建成功后,在application.properties中完成邮件基本信息配置,如下:

spring.mail.host=smtp.qq.com
spring.mail.port=465
spring.mail.username=自己的邮箱
spring.mail.password=授权码
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true

这样基本的环境就搭建好了。

2、发送简单邮件

创建一个service用来封装邮件的发送,代码如下:

package com.learn.qqemail.service;

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 {

    @Autowired
    private 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 mailMessage=new SimpleMailMessage();
        mailMessage.setFrom(from);
        mailMessage.setTo(to);
        mailMessage.setCc(cc);
        mailMessage.setSubject(subject);
        mailMessage.setText(content);

        javaMailSender.send(mailMessage);
    }
}

代码解释:

  • JavaMailSender是SpringBoot在MailSenderPropertiesConfiguration类中 配置好的,该类在 Mail自动配置类MailSenderAutoConfiguration中导入,因此这里注入JavaMailSender就可以使用了。
  • 简单邮件可以直接构建一个SimpleMailMessage对象进行配置,配置完成后,通过JavaMailSender将邮件发出去。

配置完成后,在单元测试中写一个测试方法进行测试,代码如下:

package com.learn.qqemail;

import com.learn.qqemail.service.MailService;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.File;

@RunWith(SpringRunner.class)
@SpringBootTest
class QqemailApplicationTests {

    @Autowired
    MailService mailService;

    //发送简单邮件
    @Test
    public void sendSimpleMail(){
        mailService.sendSimpleMail("xxx@qq.com",
                                     "xxx@qq.com",
                                     "xxx@qq.com",
                                 "大型认亲现场",
                                 "我是你爸爸!!!");
    }
}

3、发送带附件的邮件

要发送带附件的邮件也非常容易,通过调用Attachment方法即可添加附件,该方法调用多次即可添加多个附件。

/**
     * 发送带附件的邮件
     * @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 mimeMessage=javaMailSender.createMimeMessage();
            MimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content);
            helper.addAttachment(file.getName(),file);
            javaMailSender.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

这里使用MimeMessageHelper简化了邮件配置,他的构造方法的第二个参数true表示构造一个multipart message类型的邮件,multipart message类型的邮件包含多个正文、附件以及内嵌资源,邮件的表现形式更加丰富。最后通过addAttachment方法添加附件。
在单元测试中添加如下方法进行测试:

//发送带附件的邮件
    @Test
    public void sendAttachFileMail(){
        mailService.sendAttachFileMail("xxx@qq.com",
                                         "xxx@qq.com",
                                     "大型认亲现场",
                                     "我是你爸爸!!!",
                                             new File("E:\\rengongzhineng\\29.py"));
    }
4、发送带图片资源的邮件

有的邮件正文中可能要插入图片,使用FileSystemResource可以实现这一功能,代码如下:

 /**
     *发送带图片资源的邮件
     * @param from      邮件发送者
     * @param to        邮件收件者
     * @param subject   邮件主题
     * @param content   邮件内容
     * @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 mimeMessage=javaMailSender.createMimeMessage();
            MimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content);
            for(int i=0;i<srcPath.length;i++){
                FileSystemResource res=new FileSystemResource(new File(srcPath[1]));
                helper.addInline(resIds[i],res);
            }
            javaMailSender.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

再发送邮件时分别传入图片资源和资源id,通过FileSystemResource构造静态资源,然后调用addInLine方法将资源加入到邮件对象中。
接下来在测试类中添加如下方法进行测试:

 //发送带图片资源的邮件
    @Test
    public void sendMailWithImg(){
        mailService.sendMailWithImg("xxx@qq.com",
                "xxx@qq.com",
                "大型认亲现场",
                "我是你爸爸!!!"+ "这是图片一:<div><img src='cid:p01'/></div>"+"这是图片二:<div><img src='cid:p02'/></div>",
                        new String[]{"E:\\schoollearnspace\\image\\1234567891.jpg",
                                     "E:\\schoollearnspace\\image\\1234567891.jpg"},
                        new String[]{"p01","p02"});
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
适用人群通用各大网易系,腾讯QQ系,新浪系,阿里系等主流邮箱;同时也适用于企业开发的企业邮箱,进行收件和发件。课程概述通用各大网易系,腾讯QQ系,新浪系,阿里系等主流邮箱;同时也适用于企业开发的企业邮箱,进行收件和发件。POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。   SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。。【开发者如何进行快速开发邮件发送系统???本课程系统进行快速研发,项目实战】 部分截图如下:完整版请查看课件或者视频
Spring Boot是一个用于创建独立的、基于Spring的应用程序的框架。它提供了许多开箱即用的功能,包括邮件发送。下面是使用Spring Boot实现邮件发送的步骤: 1. 添加依赖:在项目的pom.xml文件中添加Spring Boot的邮件依赖,例如: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 2. 配置邮件信息:在application.properties或application.yml文件中配置邮件服务器的相关信息,例如: ```properties spring.mail.host=smtp.example.com spring.mail.port=587 spring.mail.username=your-email@example.com spring.mail.password=your-email-password spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true ``` 3. 创建邮件服务类:创建一个邮件服务类,用于发送邮件。可以使用JavaMailSender来发送邮件,例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; @Service public class EmailService { @Autowired private JavaMailSender mailSender; public void sendEmail(String to, String subject, String text) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setSubject(subject); message.setText(text); mailSender.send(message); } } ``` 4. 调用邮件服务类:在需要发送邮件的地方调用邮件服务类的sendEmail方法,例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class EmailController { @Autowired private EmailService emailService; @GetMapping("/sendEmail") public String sendEmail() { emailService.sendEmail("recipient@example.com", "Test Email", "This is a test email."); return "Email sent successfully."; } } ``` 以上就是使用Spring Boot实现邮件发送的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值