SpringBoot JavaMailSender 发送邮件

Spring给我们提供了一个非常好用的发送邮件接口 JavaMailSender
本文主要讲述如何在SpringBoot中使用 JavaMailSender 发送邮件

先创建一个springboot项目,引入JavaMailSender 的依赖

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

项目最后的结构如下图所示,因为也没有涉及到数据库,图个方便就都写在controller层里面。resource的static中放了个压缩文件和图片,是后面用来测试发送附件和邮件内容中带图片用的
在这里插入图片描述
既然是发送邮件,name肯定是有收件人和发件人的。这里我们因为是使用的第三方程序(就是我们写的程序)来发送邮件,所以需要去原邮件服务商哪里去做一些配置,比如我这里使用的是QQ邮箱,我们需要进入QQ邮箱的设置中去开启POP3/SMTP服务
这里需要注意的是这里开启之后会弹出一个邮箱授权码,这个授权码我们需要记下来,后面需要填在配置文件中。
在这里插入图片描述
配置文件application.properties如下

spring.mail.host=smtp.qq.com
spring.mail.username=你的邮箱
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.host这里你如果是qq邮箱就是smtp.qq.com,如果是163邮箱就是smtp.163.com

所有的配置都做好了,下面我们先发送一份简单邮件试试
邮件主题:简单邮件1
邮件内容:测试邮件内容1

@RestController
public class SendController {

    @Autowired
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private String from;

    @RequestMapping("send1")
    public String send1(){
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo("目标邮箱");
        message.setSubject("主题:简单邮件1");
        message.setText("测试邮件内容1");
        mailSender.send(message);
        return "发送成功";
    }
}

在邮件内容中插入图片

    @RequestMapping("send2")
    public String send2(){
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo("目标邮箱");
            helper.setSubject("带图片的邮件");
            helper.setText("<html><body>123456<br>下面是图片<br><img width='250px' src='cid:img110' ></body></html>", true);
            File file = new File(ClassUtils.getDefaultClassLoader().getResource("").getPath()+"static/img/测试.png");
            FileSystemResource res = new FileSystemResource(file);
            helper.addInline("img110", res);
        } catch (MessagingException e) {
            System.out.println("邮件创建失败");
            e.printStackTrace();
        }
        mailSender.send(message);
        return "发送成功";
    }

邮件如下图所示
在这里插入图片描述
之前这里使用的qq邮箱作为收件人,结果被坑惨了。刚开始收到的邮件都是破图,查看源码发现src也没有没有图片地址,回去看了一波代码,好久之后终于发现破图的原因了:qq邮箱默认把我的图片屏蔽掉了,然后在收件人下方、正文上方有一行橙红色的警告,点击显示图片,我的天,终于看见图片了。
在这里插入图片描述

发送带附件的邮件

@RequestMapping("send3")
public String send3(){
    MimeMessage message = mailSender.createMimeMessage();
    MimeMessageHelper helper = null;
    try {
        helper = new MimeMessageHelper(message, true);
        helper.setFrom(from);
        helper.setTo("目标邮箱地址");
        helper.setSubject("带附件的邮件");
        helper.setText("自己看附件了", true);
        FileSystemResource file = new FileSystemResource(new File(ClassUtils.getDefaultClassLoader().getResource("").getPath()+"static/file/测试.rar"));
        String fileName = file.getFilename();
        helper.addAttachment(fileName, file);
    } catch (MessagingException e) {
        e.printStackTrace();
    }
    mailSender.send(message);
    return "发送成功";
}

接受到的邮件内容如下所示
在这里插入图片描述

参考:使用Spring Boot发送邮件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Spring Boot提供了简便的方式来配置JavaMailSender,但是如果不使用配置文件,也可以通过编程方式来配置JavaMailSender。 首先,需要在Spring Boot应用程序的配置类或配置文件中创建一个JavaMailSender bean。可以使用JavaMailSenderImpl类作为实现,然后设置相应的属性。 例如,可以创建一个名为EmailConfig的配置类: ```java @Configuration public class EmailConfig { @Bean public JavaMailSender javaMailSender() { JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); mailSender.setHost("smtp.example.com"); // 设置SMTP服务器主机 mailSender.setPort(587); // 设置SMTP服务器端口号 mailSender.setUsername("username"); // 设置用户名 mailSender.setPassword("password"); // 设置密码 Properties props = mailSender.getJavaMailProperties(); props.put("mail.smtp.starttls.enable", "true"); // 启用STARTTLS加密 return mailSender; } } ``` 然后,在需要发送邮件的地方注入JavaMailSender,并使用其send方法发送邮件。 例如,可以创建一个名为EmailService的服务类: ```java @Service public class EmailService { @Autowired private JavaMailSender javaMailSender; public void sendEmail(String to, String subject, String body) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); // 设置收件人 message.setSubject(subject); // 设置邮件主题 message.setText(body); // 设置邮件内容 javaMailSender.send(message); // 发送邮件 } } ``` 然后,在需要发送邮件的地方使用EmailService来发送邮件。 总结来说,不使用配置文件,可以通过编程方式来配置JavaMailSender,并使用它来发送邮件
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值