AWS Simple Email Service(SES)邮件发送服务-功能调研

面向国内用户,发短信或者通知推送居多,发邮件这个功能用的不多,主要还是海外欧美用户比较流行,刚好公司要用,写一篇AWS SES功能调研文章讲解一下,跨境电商的同行可以参考一下。废话不多说,用SES就是为了发邮件,发邮件当然要求的是发出的邮件都能送到用户的收件箱(inbox)而不是垃圾箱,更别说被标记为垃圾邮件,用户收都都不到。那么SES这个服务是如何保证你的邮件送达率?

两个名词,名誉值(Reputation)和共享IP池(shared IP pool)。

名誉值(Reputaion)

AWS这个服务为什么能保证你的邮件送达率,因为这个服务发出的邮件受其他邮件供应商的信任度够高,那么为了维持这份信任度,AWS内部对所有使用这项服务的用户采取了一种积分制度-名誉值(Reputation),有点类似于支付宝的芝麻信用分。

Amazon SES maintains a strong reputation with email providers so that they deliver your email to your recipients’ inboxes.

芝麻信用分越高福利越多,同样的,名誉值高低决定了你邮件发送的权益,值越高,你每天24小时内可以发送的邮件额度越高,每秒并发发送的邮件额度也越高,分低到一定程度你这项服务甚至可能被官方禁用。是的,你没有看错,买了这个服务不意味着你就能随便用它发邮件,它是有一个每天(24小时)发送的邮件数量限制以及每秒并发发送频率限制,这个数量不是你能直接购买。

两种机制,自动提升机制-也是类似于芝麻信用,官方自动检测各种指标提升你的额度,另外就是手动申请审核机制,官方根据你的申请可能需要额外补交资料进行人工审核处理。
自动提升机制有哪些指标,还是两个名词-退件率(bounce rate)和投诉率(complaint rate)。

退件顾名思义就是邮件发出去被退回了,退件又分两种,硬退件(Hard bounce)和软退件(Soft bounce)。

  • 硬退件,就是邮件投递永久失败,例如收件人邮箱不存在,收件人邮箱的域名不存在这种,遇到这种情况SES不会尝试重新投递。
  • 软退件,就是邮件临时投递失败,例如收件人的收件箱满了,收件人邮箱地址连接超时等,遇到这种情况SES会尝试重新投递,多次失败后才会退回邮件。

这里面只有硬退件会影响你的退件率和名誉值,软退件不影响。那么SES怎么防止你的硬退件的,比如邮箱不存在这种事谁也没法保证。为此SES维护了一个全局邮箱黑名单(Global suppression list),近期(可长达14天)使用SES发送邮件被硬退回的收件人邮箱地址,就会上这个黑名单,在这个名单的收件人,SES都不会发邮件。另外不单是你自己的,还有其他用户使用SES触发的也会在里面,得益于AWS服务的大用户量,这个功能可以大大降低硬退件的几率。当然特殊情况你确定黑名单有个邮箱是对的,你非要对它发邮件,可以自定义名单(account-level suppression list)保证发出,但是一旦发出去后又被硬退回,责任在你,该降的名誉值还是会降。

经过了花钱买服务,调试配置开发等等工作,你终于给客户发出了一封邮件,客户也收到了,但是一看你这发的啥推销邮件,直接标记你为垃圾邮件(Mark as Spam),得,你白干了,再发几次直接上了客户邮箱的供应商黑名单,后面其他客户都收不到了。这个过程就是用户投诉(Complaint)的场景,怎么防止这种情况呢,SES跟其他邮箱供应商有对接的反馈机制,收到这种标记,直接就会转发一个通知给你,你就别再给这个用户重复发送邮件了(通过SES的API各种通知事件的回调对接就可以自动实现),另外运营同学自己再检查检查邮件内容是不是触发用户哪个G点了。

除此之外,官方还建议你发送高质量的邮件内容,提高收件人的打开邮件几率,官方为了防止你滥发垃圾邮件,还有一层过滤——内容过滤(Content filtering),就是说你通过SES发出的所有邮件的内容都会进行检测,以防止有垃圾邮件或者带病毒的邮件发出,检测到的话,不好意思,名誉值(Reputation)降低。

对于邮件发送数量,官方建议是尽量维持每天的发送数量达到最大值附近,但是绝对不能超出,这样自动检测机制才会不断给你加大额度。

还有就是不要用生产环境来发送测试邮件,这句话应该是对后端研发同学说的,官方提供了各种场景的收件箱模拟器(mailbox simulator)给研发测试。

我们不但要提升额度,也要保证额度不能降低,不然一顿操作猛如虎,结果一看额度还降低了。那么怎么做呢?

这就要求运营同学时刻监控退件率、投诉率这些指标,及时调整发送邮件策略,另外也要要求后端研发同学对接SES各种通知回调事件,及时预警。SES还提供临时暂停所有邮件发送的操作,避免突发事件。

说了那么多要求,SES这个服务条条框框很多,为了发个邮件代价这么大还要受各种约束,感觉划不来。这就要说到SES另外一个名词,共享IP池(Shared IP pool)。

这就不得不提到另外一个邮件发送的问题,发生邮件用的固定IP地址需要进行预热操作(IP address warm-up),为什么要做这个?因为如果是一个新的IP突然发出大量的邮件,哪怕你buffer叠满也没用,其他邮件供应商的系统照样给你封杀了,客户收不到你的邮件。
传统的预热操作就需要你逐天逐天地增加邮件的发送数量,直到一定程度才能正常使用,而且不能有突发的高频率邮件发送。

借助SES的共享IP池,AWS将你发出的邮件分散到其他使用SES服务的用户注册的IP地址进行发送,可以让你在初期就可以发出较大数量的邮件。当然有利就有弊,用了这个服务你的IP可能也会加到这个池子里面被其他新人使用,官方文档也没说自己IP因此被ban了会怎么样。
当然你也可以关了这个功能,自己做自己ip的预热,不要SES自动帮你完成预热。

Original: https://www.cnblogs.com/yeyu456/p/16636194.html
Author: yeyu456
Title: AWS Simple Email Service(SES)邮件发送服务-功能调研

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607663/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 数据库系统概论小结(三)【面向考试】

    数据库系统概论小结(三)【面向考试】 第三章 关系数据库标准语言SQL 前面学习实操的时候已经做过总结 第四章 数据库安全性 4.1数据库安全性概述 4.1.1数据库不安全因素 非…

    Java 2023年6月16日
    076
  • JavaDoc

    JavaDoc javadoc命令是用来生成自己API文档的。 参数信息: * @author 作者名 @version 版本号 @sinse 指明需要最早使用的JDK版本 @pa…

    Java 2023年6月9日
    080
  • golang并发编程中select关键字的使用

    golang并发编程中select关键字的使用 select的使用类似于switch语句,有case和default分支。其中每个case对应一个通道的通信过程: 1、select…

    Java 2023年6月13日
    072
  • idea激活码

    转载请注明出处。 作者:peachyy 出处:http://www.cnblogs.com/peachyy/ 出处:https://peachyy.gitee.io/ 出处:htt…

    Java 2023年6月16日
    081
  • 动态代理大揭秘,带你彻底弄清楚动态代理!

    前言 代理模式是一种设计模式,能够使得在不修改源目标的前提下,额外扩展源目标的功能。即通过访问源目标的代理类,再由代理类去访问源目标。这样一来,要扩展功能,就无需修改源目标的代码了…

    Java 2023年6月8日
    0105
  • HTTP Study

    定义:在两点之间传输文本,视频,图片等超文本数据的协议和规范 HTTP风险 通信使用明文,https通过信息加密(混合加密)解决 无法验证报文的完整性,https通过校验机制(摘要…

    Java 2023年6月8日
    080
  • Mybatis的缓存

    Mybatis的一级缓存是 默认开启的,你只要搭建一个Mybatis框架,就可以直接使用一级缓存。 一级缓存是 SqlSession级别的,通过SqlSession查询的数据会被缓…

    Java 2023年6月14日
    092
  • 16.判断JSON是JSONObject或者JSONArray

    JSONObject json=new JSONObject();Object json1=new JSONTokener(rrinfo.getParametersJson())….

    Java 2023年6月13日
    084
  • [学习标准库]math.h

    概述:math.h中为我们提供了三角函数数值运算、指数对数运算、绝对值、平方值、以及一些基本的数值处理。 函数:sin功能:计算弧度的正弦值。使用说明:sin(x),x为传入的弧度…

    Java 2023年6月5日
    081
  • java实现微信公众号的模板消息推送

    文章目录前言一、什么是模板消息二、获取模板ID三、获取access_token四、发送消息五、完整的代码总结前言最近做项目时需要用到公众号的模板消息,所以在这里记录分享一下实现过程…

    Java 2023年5月29日
    072
  • Core Java 总结(关键字,特性问题)

    简单说就是构造器 内对一个final域的写,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序,即如果final域在构造器内初始化,那么一定是先初始化完毕,才…

    Java 2023年5月29日
    0107
  • 背题!

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/0x3e-time/p/16344648.htmlAut…

    Java 2023年6月13日
    070
  • 解决 nginx 出现 413 Request Entity Too Large 的问题

    1.若nginx用所用的 php 请求解析服务是 fpm, 则检查 /etc/php5/fpm/php.ini 文件中的参数 csharp;gutter:true; upload_…

    Java 2023年5月30日
    0116
  • chrome安装vue-devtools遇到的常见问题及解决方法

    vue-devtools安装常见问题及解决方案 采用vue框架进行前端开发,常常采用chrome、firefox浏览器,并搭配vue-devtools,提高开发效率。环境搭建过程中…

    Java 2023年6月6日
    059
  • 设计模式(单例模式)

    单例模式:保证类在内存中只有一个对象。 如何保证类在内存中只有一个对象呢? A:把构造方法私有 B:在成员位置自己创建一个对象—-私有化并静态化 C:通过一个公共的方法…

    Java 2023年6月5日
    066
  • 面向对象ooDay5

    默认的:什么也不写,本类、同包类 说明: java不建议默认访问权限 类的访问权限只能是public或默认的,类中成员的访问权限如上4种都可以 访问权限由小到大依次为:privat…

    Java 2023年6月13日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球