# 邮件推送服务

## 需求分析

希望邮件推送服务能提供的功能

- 可编程、可扩展（通过程序对接、改造）
    - 能够通过开发在程序逻辑或者管理界面中自动触发发送
    - 支持邮件发送验证码和邮件营销推送
    - 能够支持HTML的邮件内容，而HTML内容能够随时随地进行修改，方便美工和开发去调整

- 可观测
    - 验证类邮件能够支持IP统计、次数统计，能够进行时间限制、防止恶意发送
    - 推送类邮件能够支持统计发送数量、发送成功率等反馈数据

- 推送效率
    - 验证邮件要能在5-10秒内发送成功，到达率高

- 用户友好
    - 用户可以退订推送类邮件

## 功能设计


1. 邮件模板模块。通过模板功能来支持HTML邮件内容以及随时可更新替换的要求，通过模板里的关键词参数设计，来达到验证码、用户名、营销内容等动态输入。

2. ~~验证码模块。用来支撑邮件验证码校验、请求限制等功能~~ （由调用方来限制，放入认证服务中）。

3. 记录发送记录相关信息模块。记录所有发送记录，用于统计和分析。

4. 管理后台模块。包括：用户管理、邮件模板配置、发送记录查询等基本支撑功能，在后台尽量以界面化实现管理。

5. 将企业邮局和邮件推送服务分离；企业内外网邮件域隔离。
以域名 `XXX.com` 为例，一般企业邮局地为`zhangsan@XXX.com`
邮件服务不适合也以`XXX.com`为域，因为这会和企业邮局服务相互干扰（也不是没有规避方式，只是配置起来很麻烦）
隔离方案：增加一个二级域名，例如`mail.XXX.com`，邮件服务地址就是 `service@mail.XXX.com`。

-------------

不建议自己搭邮件服务器，十分容易被拦截，即使使用ip池



----------

参考：https://www.cnblogs.com/chuma/p/5694744.html
https://www.cnblogs.com/tellerfuliye/articles/13156469.html


----
shoulder 以外的其他方案

https://gitee.com/52itstyle/spring-boot-mail



