SpringBoot实现邮件发送

在Spring Boot中发送邮件是一个相对直接的过程,主要得益于Spring Framework内置的对JavaMailSender接口的支持。

一、准备工作(QQ邮箱为例)

首先要申请开通POP3/SMTP服务或者IMAP/SMTP服务。SMTP全称为Simple MailTransfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与SMTP服务器之间,以及SMTP服务器与SMTP服务器之间的通信规则。

1.打开设置

2.找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

3.点击开启服务

4.发送短信验证

5.保存授权码

授权码保存后准备工作就结束了

二、添加依赖与配置

使用SpringBoot发送邮件,首先要添加邮件依赖

 <!--添加邮件依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

随后配置application.yml文件

spring:
  mail:
    host: smtp.qq.com #邮件服务器地址
    port: 465 #端口号
    username: 
    password: 
    default-encoding: UTF-8 #默认编码格式
    properties:
      mail:
        debug: true #启动debug调试
        smtp:
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory #SSL连接配置

查看服务器地址和端口

打开帮助中心

搜索SSL

查看服务器地址和端口

三、发送邮件

1.创建Controller

1.JavaMailSender是Spring Boot在MailSenderPropertiesConfiguration类中配置好的,该类在Mail自动配置类MailSenderAutoConfiguration中导入,因此这里使用@Autowired注入JavaMailSender就可以使用了
2.传递的5个参数分别表示邮件发送者、收件人、抄送人、邮件主题以及邮件内容
3.简单邮件可以直接构建一个SimpleMailMessage对象进行配置,配置完成后,通过JavaMailSender将邮件发送出去

@RestController
public class EmailController {

    @Autowired
    private JavaMailSender javaMailSender;

    /**
     * 发送不带附件的邮件
     * @param from
     * @param to
     * @param cc
     * @param subject
     * @param text
     */
    public void sendMail(String from, String to, String cc, String subject, String text){
        SimpleMailMessage smm = new SimpleMailMessage();
        smm.setFrom(from); // 发送者
        smm.setTo(to); // 收件人
        smm.setCc(cc); // 抄送人
        smm.setSubject(subject); // 邮件主题
        smm.setText(text); // 邮件内容
        javaMailSender.send(smm); // 发送邮件
    }
}

2.测试类

使用测试类给自己发邮件

@SpringBootTest
class EmailControllerTest {

    @Autowired
    private EmailController emailController;

    @Test
    void sendMail() {
        emailController.sendMail(
                "2462137172@qq.com",
                "2462137172@qq.com",
                "2462137172@qq.com",
                "SpringBoot发送邮件",
                "邮件发送成功啦!"
        );
    }
}

测试结果:

四、发送带有附件的邮件

1.Controller

要发送一个带附件的邮件也非常容易,通过调用Attachment方法即可添加附件,在Controller中添加如下方法

这里使用MimeMessageHelper简化了邮件配置,它的构造方法的第二个参数true表示构造一个multipart message类型的邮件。最后通过addAttachment方法添加附件。

 /**
     * 发送带附件的邮件
     * @param from
     * @param to
     * @param subject
     * @param text
     * @param filePath
     */
    public void sendFileMail(String from, String to, String subject, String text, String filePath) {
        try {
            // 检查文件路径是否有效
            File file = new File(filePath);
            if (!file.exists()) {
                throw new FileNotFoundException("文件不存在: " + filePath);
            }

            MimeMessage mm = javaMailSender.createMimeMessage();
            MimeMessageHelper mmh = new MimeMessageHelper(mm, true);
            mmh.setFrom(from);
            mmh.setTo(to);
            mmh.setSubject(subject);
            mmh.setText(text);
            mmh.addAttachment(file.getName(), file);

            javaMailSender.send(mm);
            System.out.println("邮件发送成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2. 测试类

    @Test
    void sendFileMail() {
        emailController.sendFileMail(
                "2462137172@qq.com",
                "2462137172@qq.com",
                "发送带有文件的邮件",
                "文件",
                "C:\\Users\\li\\Desktop\\lanyangyang.jpg"
        );
    }

测试结果

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值