springboot3——Email

maven导入包:

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

参数配置:

# MailProperties
spring.mail.host=smtp.sina.com
spring.mail.port=465
spring.mail.username=hebtu_ftz@sina.com
spring.mail.password=c33ce75afaff8015
spring.mail.protocol=smtps
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtl.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

写发送工具类:

package com.now.community.community.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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;

@Component
public class MailClient {
    private static final Logger logger = LoggerFactory.getLogger(MailClient.class);

    @Autowired
    private JavaMailSender mailSender;

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

    public void sendMail(String to, String subject, String content) {
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);
            mailSender.send(helper.getMimeMessage());
        } catch (MessagingException e) {
            logger.error("发送邮件失败:" + e.getMessage());
        }
    }
}

测试类:

package com.now.community.community;

import com.now.community.community.util.MailClient;
import org.junit.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.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class MailTests {
    @Autowired
    private MailClient mailClient;
    @Autowired
    private TemplateEngine templateEngine;

    @Test
    public void testTextMail(){
        mailClient.sendMail("450427951@qq.com","TEST","welcome");
    }

    @Test
    public void testHtmlMail(){
        Context context=new Context();
        context.setVariable("username","fantianzuo");
        String content=templateEngine.process("/mail/demo",context);
        System.out.println(content);
        mailClient.sendMail("450427951@qq.com","HTML",content);
    }
}

html:

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

 

### Spring Boot 3 中响应式编程概述 Spring Boot 3 继续强化了对响应式编程的支持,这得益于其底层依赖的Spring Framework版本所引入的功能改进。响应式编程允许开发者编写异步、非阻塞式的代码,从而提高应用程序性能和资源利用率[^1]。 ### 创建简单的响应式Web应用 为了展示如何在Spring Boot 3中使用响应式编程,下面是一个基本的例子: #### 添加依赖项 首先,在`pom.xml`文件里加入必要的Maven依赖以启用WebFlux模块支持: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> ``` #### 编写控制器类 接着定义一个RESTful风格的服务端点,它返回Mono类型的单个数据流对象给客户端请求处理。 ```java @RestController @RequestMapping("/api/reactive") public class ReactiveController { @GetMapping(value = "/hello", produces = MediaType.TEXT_PLAIN_VALUE) public Mono<String> sayHello() { return Mono.just("Hello, world!"); } } ``` 上述例子展示了最基础的操作方式;实际项目可能会涉及到更复杂的业务逻辑和服务间通信场景下的应用[^2]。 ### 实现复杂的数据流转操作 当面对较为复杂的流程控制需求时,可以借助于Project Reactor提供的强大工具集——比如`flatMap()`函数用于扁平化嵌套结构或是组合多个独立事件源成为单一序列等高级特性来进行优化设计[^3]。 例如,假设有一个需要查询数据库并发送邮件通知用户的任务链路,则可以通过如下形式完成编码工作: ```java @Service class UserService { private final UserRepository userRepository; private final EmailService emailService; // 构造器注入省略... public Flux<UserDTO> processUsers(String status) { return userRepository.findByStatus(status).flatMap(user -> this.emailService.sendEmailNotification(user.getEmail()) .thenReturn(user)) .map(User::toDto); } } ``` 这段代码片段说明了怎样利用`.flatMap()`方法串联起两个不同阶段的任务执行过程,并最终转换成所需的输出格式[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兔老大RabbitMQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值