wampserver为什么邮件发送不了_SpringBoot优雅地发送邮件

在小明经历的多个项目开发中,总会遇到 消息通知的场景,比如某个广告主提交一个表单,我们要通知提醒运营人员及时查看。
6366d7b757cedd670f6298d371e83753.png

消息通知的形式也有很多,比如:短信、邮件、app推送等,本文主要给大家描述一下邮件通知的形式,因为邮件相比较其他通知渠道更方便实用(免费),除了简单文本邮件(已经满足大多数情形),本文还会重点说一下集成Thymeleaf模版引擎,使用HTML的形式发送邮件,尽管HTML内容不是标准化的消息格式,但是许多邮件客户端至少支持标记语言的子集,这种方式相比较纯文本展现形式更加友好。

准备

一个普通再也普通不了的SpringBoot项目

简单文本发送

还是那句老话,在SpringBoot看来一切都是这么便捷。它已经集成邮件发送所必需的库模块,我们只需将以下依赖添加到pom.xml即可。

org.springframework.boot spring-boot-starter-mail

邮箱服务结构

Spring框架中用于Java邮件支持的接口和类组织如下:

  1. MailSender interface:发送简单基础电子邮件的顶级接口;
  2. JavaMailSender interface:是MailSender的子接口。它支持MIME消息,并且主要与MimeMessageHelper类一起用于创建MimeMessage。建议在此接口实现类JavaMailSenderImpl中使用MimeMessagePreparator机制;
  3. JavaMailSenderImpl class:实现了JavaMailSender 的接口,它支持MimeMessage和SimpleMailMessage;
  4. SimpleMailMessage class:用于创建简单的邮件消息,包括from,to,cc,subject和text字段;
  5. MimeMessagePreparator interface:提供一个回调接口,用于编写MIME消息;
  6. MimeMessageHelper class:用于创建MIME消息的帮助类。它为HTML布局中的图像,典型邮件附件和文本内容提供支持。

在以下部分中,我将向大家展示如何使用这些接口和类:

配置文件

下面举例163邮箱(最常用的):

spring: mail: host: smtp.163.com # 发件服务器 username: coderxm@163.com # 账号 password: xxxx # 密码(163需要授权第三方登录密码,请查看设置-客户端授权码密码开通) port: 465 protocol: smtp default-encoding: utf-8 # 下面这些配置大家不用深究,主要用于配置ssl properties: mail: imap: ssl: socketFactory: fallback: false smtp: auth: true ssl: enable: true socketFactory: class: com.fintech.modules.base.util.mail.MailSSLSocketFactory starttls: enable: true required: true test-connection: false

代码

service层

按照常见的代码结构,我们先定义一个发送邮件的接口,负责创建和发送新的邮件消息。

public interface EmailService { /** * 发送简单文本内容 * @param to 发件人 * @param subject 主题 * @param text 内容 */ void sendSimpleMessage(String to, String subject, String text);}

我们可以将一些常用的配置添加到yml配置文件当中

# 邮件配置xiaoming: email: subject: "程序员小明" from: "coderxm@163.com" to: "xiaohong@163.com" # 抄送人:类型定义为数组,可以配置多个 cc: - "xiaogang@163.com"

然后再通过注解注入到一个实体类中,这样很优雅,随用随取:

@Configuration@ConfigurationProperties(prefix = "xiaoming.email")@Datapublic class EmailConfig { private String subject; private String from; private String to; private String[] cc;}

我们再定义一个类去实现这个接口:

@Slf4j@Servicepublic class EmailServiceImpl implements EmailService { @Autowired public JavaMailSender emailSender; @Autowired private EmailConfig emailConfig; @Override public void sendSimpleMessage(String to, String subject, String text) { try { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setFrom("coderxm@163.com"); message.setSubject(subject); message.setText(text); emailSender.send(message); } catch (MailException exception) { log.error(ExceptionUtil.stacktraceToString(exception)); } }}

测试

我们做一个简单的测试:简单的邮件是否能够发送成功。

@RunWith(SpringRunner.class)@SpringBootTestpublic class EmailTest { @Autowired private EmailService emailService; @Test public void testSimple(){ emailService.sendSimpleMessage("ligang@163.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值