邮件发送组件

邮箱设置

启用客户端POP/SMTP服务,获取授权码,之后用程序登录邮箱时要使用授权码作为密码

image-20240106171518213

导入jar包

导入spring boot mail starter依赖

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

存在问题:javax.mail不存在

解决方案:

  1. 导入javax.mail包:上文是springboot整合的java mail,理论上只导入它就行了,但是jdk可能会报错说找不到javax.mail,原因可能是maven导入的是jarkata.mail,名字不匹配,需要再导入一个javax.mail包。

           	<dependency>
        		<groupId>javax.mail</groupId>
        		<artifactId>javax.mail-api</artifactId>
        		<version>1.6.2</version>
    		</dependency>
    
  2. 限制spring boot mail starter包的版本。

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

邮箱参数配置

# 发送邮件使用的邮箱域名 Protocol used by the SMTP server.
spring.mail.host = smtp.sina.com
# 发送邮件使用的端口,发送邮件的端口一般默认都是465
spring.mail.port = 465
# 发送邮件使用的协议(协议加s表示使用的是加密的安全协议)
spring.mail.protocol = smtps
# 邮箱账号、密码(开启pop/stmp后要使用授权码作为登陆密码)
spring.mail.username = proj_nowcoder@sina.com
spring.mail.password = proj_nowcoder123
# spring.mail.properties.* :其他更详尽的配置 
# 发送邮件时采用ssl安全连接
spring.mail.properties.mail.smtp.ssl.enable = true

发送邮件

简单的邮件我们可以通过SimpleMailMessage来发送,对于复杂的带有附件(如html、图片、附件等)的我们可以借助MimeMessageHelper来构建MimeMessage发送邮件。

我们以后都按发送复杂邮件的方式写代码

// 邮件组件
// 用Component表示是一个通用的bean,在哪个层次都可以用
@Component
public class MailClient {
    private Logger logger = LoggerFactory.getLogger(MailClient.class);

    @Autowired
    // 发送邮件的核心组件
    private JavaMailSender javaMailSender;

    // 邮件三要素:发送邮箱 接收邮箱 标题内容
    // 通过服务器发邮件,发送邮箱都是固定的,就是配置文件中配置的username
    @Value("${spring.mail.username}") // 使用properties文件中配置的邮箱,可通过key来获取
    private String from;

    /**
     * 用于发送邮件
     * @param to 发送目标
     * @param subject 主题
     * @param content 内容
     */
    public void sendMail(String to, String subject, String content){
        try {
            // 1. 通过JavaMailSender中方法构建发邮件所需的MimeMessage对象
            MimeMessage message = javaMailSender.createMimeMessage();
            // 2. MimeMessageHelper帮助类,帮助构建MimeMessage中内容
            MimeMessageHelper helper = new MimeMessageHelper(message);
            // 3. 设置邮件
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            // setText(邮件内容, 内容格式是否支持html格式文本)
            helper.setText(content,true);
            // 4. 发送邮件
            javaMailSender.send(helper.getMimeMessage());
        } catch (MessagingException e) {
            // 日志记录错误原因
            logger.error("发送邮件失败,原因:"+e.getMessage());
            e.printStackTrace();
        }
    }
}

发送普通文本邮件测试

@SpringBootTest
@ContextConfiguration(classes = Springdemo1Application.class)
public class MailTests {
    @Autowired
    private MailClient mailClient;

    @Test
    public void textMailTest(){
        mailClient.sendMail("test@qq.com", "发送邮件测试", "Welcome.");
    }
}

发送html邮件测试

动态页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>这是一个html版测试邮件</title>
</head>
<body>
    <p>
        欢迎你, <span style="color:red;"  th:text="${username}"> !</span>
    </p>
</body>
</html>

测试

@SpringBootTest
@ContextConfiguration(classes = Springdemo1Application.class)
public class MailTests {
    @Autowired
    private MailClient mailClient;

    @Autowired
    // 模板引擎
    private TemplateEngine templateEngine;

    /**
     * 发送html邮件
     */
    @Test
    public void htmlMailTest(){
        // MVC中Controller可以通过页面路径直接调用html页面
        // 而测试类中,必须利用模板引擎调用模板

        // 1. 构建模板所需参数
        Context context = new Context();
        context.setVariable("username", "LayZhang");
        // 2. 获取指定html页面的内容(String类型)
        String content = templateEngine.process("/demo/mail",context);
        System.out.println(content);
        // 3. 发送邮件
        mailClient.sendMail("test@qq.com", "发送html邮件测试",content);
    }
}

参考文章

https://blog.csdn.net/weixin_51764982/article/details/122797092

一些选择题

2.2【瑞客论 坛 www.ruike1.com】

D

2.3【瑞客论 坛 www.ruike1.com】

C

2.4【瑞客论 坛 www.ruike1.com】

AD
in_51764982/article/details/122797092

一些选择题

[外链图片转存中…(img-6aqVBf00-1709220954588)]

D

[外链图片转存中…(img-9Xo3deVi-1709220954589)]

C

[外链图片转存中…(img-1FOOlmMO-1709220954590)]

AD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值