一、引言
调用邮件接口发送邮件是一个简单的功能,但是要搭建一个平台,支持百万级的邮件,却不是那么简单。
如何快速推送百万邮件?这个功能看上去就像发百万短信一样,找一个靠谱的第三方推送平台,启动多个进程,几分钟就搞定。瓶颈肯定在第三方平台,而不是我们。然而,这个简单的百万级邮件发送平台(EDM)却花了我三个多月的时间。
EDM(Email)主要用于发送大量的营销和促销邮件,我搭建的EDM平台主要是用来给订阅者发送促销邮件和通知邮件。
2.思考
最初我们的需求是定期给100万用户发邮件,当接到这个需求的时候我最初的想法是这样的:
因为发送邮件、短信、APP推送的业务很类似,所以我打算把它做成消息中心,邮件发送功能只是调用消息中心接口时传输的一种名为email的消息类型。
因为第三方邮件平台肯定会限制接口调用的频率,所以我们需要计算一下要申请多少个发送邮箱,启动多少个发送进程。
因为电子邮件是按顺序发送的(先发送新用户,后发送旧用户),所以需要使用信号量或消息队列在进程之间进行通信。
还有一些零散的优化点。比如要支持任务中断、支持用户的已读功能、邮件样式需要兼容Mac客户端、右上角要有“在浏览器中查看此邮件”、右下角要有“取消订阅”等。
按照上述方案,EDM平台很快就搭建好了,各个功能点也顺利测试完毕,就正式上线投产了。看到自己一口气写好的项目完美上线,心里很开心,然而这只是噩梦的开始……
按理说应该不会有问题,EDM项目用到的每一个技术点都是自己擅长的解决方案,但当问题出现时,才发现EDM项目好难,很多问题不是技术能解决的,成功投递一封邮件很容易,但要成功投递100万封邮件却极其困难,技术只是解决问题的工具,当问题无法用工具解决时,就只能寻求理论支撑。
3. 我需要的理论支持
刚接触互联网的时候,QQ等IM工具是大家必备的,而Email对我来说是一个老牌的通讯工具,除了工作需要,平时基本不会打开。Gmail满天都是广告,QQ、网易邮箱更是惨不忍睹。这也导致我对Email协议的理解很差,首先要面对的就是各种“反垃圾邮件策略”导致的投递失败。
反垃圾邮件策略有很多,Email协议也定义了大量的规范,下面我会详细讲解主要的优化点。
添加 MX 和 SPF 记录
MX(Mail)是指向邮件服务器的邮件交换记录,用于邮件系统在发送邮件时根据收件人的地址后缀来定位邮件服务器。用户可以将域名下的邮件服务器指向自己的邮件,进而自行控制所有邮箱设置。
SPF()发件人策略框架,通常简称为SPF,是一种为防止垃圾邮件而提出的DNS记录类型。它是一种TXT类型的记录,用于注册域名拥有的所有IP地址以发送邮件。
SPF 是与 DNS 相关的一项技术,其内容写在 DNS 的 txt 类型记录中。MX 记录的作用是向发件人表明某个域名是哪些邮件服务器发的,SPF 的作用与 MX 相反,是告诉收件人某个域名允许哪些邮件服务器发邮件。
SPF的主要功能是打击垃圾邮件,主要针对发件人伪造域名的垃圾邮件。
这两个参数很容易添加,只要添加两个DNS解析记录就可以了。
支持DKIM、DMARC协议
DKIM(邮件)域名密钥识别邮件标准。发件人将 DKIM 和电子签名信息插入邮件头。收件人通过 DNS 查询获取公钥后进行验证。
DMARC(基于 、 和 )是由微软、雅虎等 15 家行业巨头(主要包括金融机构、电子邮件服务商、数据分析机构等)联合宣布成立一个新的互联网联盟,致力于提交和推广新的电子邮件安全协议 [DMARC]。随着联盟的不断壮大,网易等其他行业先锋也纷纷加入其中。
这两个协议特别难添加...如果你有使用阿里云邮件服务的话可以联系客服帮忙添加。
配置列表-
List-用于设置取消订阅的参数,一般设置一个收件箱,比如说。主流的邮件服务器都会检测是否有这个参数,如果有的话,会直接在客户端显示一个“取消订阅”的按钮。比如有时候在Gmail中就会显示,点击这个按钮就会自动发送邮件。我们需要实时检查邮箱是否收到了用户发送的邮件,如果有的话,下次就不要再给用户发邮件了,否则会有严重的惩罚。
如果不设置该参数,容易被邮件服务商拒绝或者限制频率。List-参数设置在Email协议的请求头中,而不是在邮件内容中添加“取消订阅”的超链接。
调试技巧
可以查看邮件的分数,主要测试以上参数,一眼就能看出是否有效。
您可以在 Gmail、#inbox 中查看电子邮件的原始内容
配置完以上所有参数后,我们平台发往测试平台的邮件评分基本都在99分以上,皆大欢喜!不过现在高兴还为时过早,通过配置各种协议和参数,我们只能提高邮件的送达率,却不能保证邮件不会被拒收。国内邮件服务商网易和腾讯是邮件巨头,这两大巨头并不是对所有邮件都接受,他们的策略如下:
每分钟、每小时、每天的发送量都有相应的限制;
我们用定时任务针对不同厂商执行不同的发送频率,比如网易每分钟只发15封,腾讯每分钟只发20封等等……但我们有几百万封邮件要发,几个月肯定发不完。所以我们申请了多个邮箱同时发送。这些发送逻辑都可以通过代码实现,能用代码解决的问题都不是问题。
电子邮件内容的质量控制
归根结底,如果邮件内容质量很低,无论技术优化得有多好,用户还是会把它扔进垃圾箱或者举报。举报越多,邮件服务商给你的配额就越低。比如你每分钟只能发 5 封邮件……要发 100 万封邮件,需要 2 年时间(当然现实中不是这样,加入邮件服务商联盟后就容易了)。
所以我们花了很多心思在邮件内容的把控上,每封发出去的邮件都需要经过多人审核,在多个终端、多个平台进行测试,最终确保每封邮件都是精美的,让用户有打开的欲望。当然,作为程序员,很多自己不喜欢的、认为不合适的内容还是会发给用户,这个技术是无法优化的。
四、最终结论
现在EDM平台可以保证邮件的送达率保持在96%以上,发一百万封邮件要花费几千块钱,如果不努力提高送达率,就是在浪费钱,做这个功能没有任何意义。我写代码越久,越觉得技术就是用来服务用户的,如果代码不产生价值,其实就是垃圾代码。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。