Loading... ## 1.`pom.xml`引入JavaMailSender依赖 ```xml <!--发送邮箱依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` ## 2.`yml`配置邮箱信息 ```yml spring: mail: host: smtp.exmail.qq.com username: wufan@topway-network.cn password: Cm8dML********* ``` ## 3. Java代码实现 ```java /** * 邮箱发送模板 */ @Component public class EmailUtils { @Autowired private JavaMailSender javaMailSender; public void sendEmail(String email, String code) { //创建SimpleMailMessage对象 SimpleMailMessage message = new SimpleMailMessage(); //邮件发送人 message.setFrom("email@fivk.cn"); // 这里需要与发送邮箱一致 //邮件接收人 message.setTo(email); //邮件主题 message.setSubject("贵州旅游登录验证码"); //邮件内容 message.setText("尊敬的:"+email+"您的注册校验验证码为:" + code + "有效期5分钟"); //发送邮件 javaMailSender.send(message); } } ``` ## 4.异步并发发送邮箱 可以将日志信息和判断发送结果的逻辑放到`sendEmailAsync()`函数中。以下是修改后的代码示例: ```java /** * 发送邮箱 * @param emailContent 邮箱内容 * @param toEmail 接收人邮箱 */ public void sendEmailAsync(String emailContent, String toEmail) { CompletableFuture.runAsync(() -> { //创建SimpleMailMessage对象 long t = System.currentTimeMillis(); SimpleMailMessage message = new SimpleMailMessage(); //邮件发送人 message.setFrom(fromEmail); // 这里需要与发送邮箱一致 //邮件接收人 message.setTo(toEmail); //邮件主题 String date = TimeHelper.timeStamp2Date(String.valueOf(t)); message.setSubject("异常警告-" + date); //邮件内容 message.setText(emailContent); //发送邮件 log.info("[{}] 邮箱开始发送...emailContent=[{}],toEmail=[{}]", t, emailContent, toEmail); try { javaMailSender.send(message); log.info("[{}] 邮箱发送结果,res=[{}]", t, true); } catch (Exception e) { log.error(e.getMessage(), e); log.info("[{}] 邮箱发送结果,res=[{}]", t, false); } }); } ``` 在修改后的代码中,`sendEmailAsync()`函数负责记录发送开始的日志、调用`sendEmail()`函数发送邮件、记录发送结果的日志。这样,整个发送邮件的过程都会被封装在`sendEmailAsync()`函数里,并且发送时的日志记录和结果判断都在同一个异步线程中进行。 这种修改可以让代码更加简洁,同时保持了良好的可读性和可维护性。 最后修改:2023 年 11 月 30 日 © 允许付费转载 打赏 赞赏作者 支付宝微信 赞 1 如果觉得我的文章对你有用,请随意赞赏