搭建百万级别邮件发送平台
来源:互联网 发布:墨鱼帝国cms百度网盘 编辑:程序博客网 时间:2024/05/17 04:18
摘要: 一. 前言 调用邮件接口发送邮件是再简单不过的功能。但是要做成平台并且支持百万级别的发送量,就没那么简单。 如何快速的将数百万封邮件推送出去?这个功能看上去和发送数百万条短信一样。找个靠谱的第三方推送平台,起多个进程,分分钟的事情,瓶颈肯定是在第三方平台而不是我们这里。
一. 前言
调用邮件接口发送邮件是再简单不过的功能。但是要做成平台并且支持百万级别的发送量,就没那么简单。
如何快速的将数百万封邮件推送出去?这个功能看上去和发送数百万条短信一样。找个靠谱的第三方推送平台,起多个进程,分分钟的事情,瓶颈肯定是在第三方平台而不是我们这里。但是这个简单的百万级别邮件发送平台(EDM)耗费了我3个多月的时间。
EDM(Email Direct Marketing)主要用于较大量的营销和推广类邮件发送。我搭建的EDM平台主要用于给订阅用户发送推广类邮件和通知类邮件。
二. 思考
最初我们的需求是需要定期给100W用户推送邮件,接到这个需求时我最初的想法如下:
因为发送邮件、短信、APP推送的业务非常相似,所以我打算做成一个消息中心,发邮件功能只是调用消息中心接口时传的一个名为email的消息类型。
因为第三方邮件平台对接口调用频率肯定会有限制,所以我们需要计算申请多少个发件邮箱,起多少个发送进程。
因为邮件是按顺序发送(新用户先发,老用户后发),所以需要在进程间进行通信,使用信号量或者消息队列。
还有一些零散的优化点。比如要支持任务中断,支持用户已读功能,邮件样式需要兼容Mac版Outlook客户端,右上角一定要有『在浏览器中查看此邮件』,右下角要有『取消订阅』。
依照如上规划,EDM平台很快就搭建完成,各个功能点测试一路畅通,于是正式上线投入生产。看着自己一气呵成写的项目完美上线,心情无比舒畅,不过这只是噩梦的开始……
按道理说不可能出问题,EDM项目中使用的每一个技术点都是我拿手的方案……当问题出现时我才发现EDM项目原来这么难,很多问题不是技术能解决的。成功投递一封邮件很简单,但是成功投递100W封就难于上青天,技术只是解决问题的工具,当出现的问题没法用工具解决时,我们只能寻求理论支撑。
三. 我要的理论支撑
我接触互联网时QQ这种IM工具就人人必备了,邮件对我来说是一种古老的沟通工具,除了工作中需要使用外,生活中都不会打开。Gmail中全是Facebook,Twitter,Linkedin的广告,QQ和网易邮箱更是惨不忍睹。这也导致我对Email协议的了解少的可怜。而我首先要面对的就是各种『反垃圾邮件策略』导致的投递失败问题。
反垃圾邮件策略有很多,Email协议也定义了大量的规范,详情 http://www.faqs.org/rfcs/ 我将拿出主要的优化点来说明。
添加 MX 与 SPF 记录
MX(Mail Exchanger)是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器。用户可以将该域名下的邮件服务器指向到自己的mail server上,然后可自行操控所有的邮箱设置。
SPF (Sender Policy Framework)发信者策略架构,通常都直接称为SPF,SPF是为了防范垃圾邮件而提出来的一种DNS记录类型,它是一种TXT类型的记录,它用于登记某个域名拥有的用来外发邮件的所有IP地址。
SPF是跟DNS相关的一项技术,它的内容写在DNS的txt类型的记录里面。MX记录的作用是给寄信者指明某个域名的邮件服务器有哪些。SPF的作用跟MX相反,它向收信者表明,哪些邮件服务器是经过某个域名认可会发送邮件的。
SPF的作用主要是反垃圾邮件,主要针对那些发信人伪造域名的垃圾邮件。
这两个参数很好加,添加两条DNS解析记录就行。
支持 DKIM、DMARC 协议
- 搭建百万级别邮件发送平台
- 搭建百万级别邮件发送平台
- 搭建百万级别邮件发送平台
- 搭建亿万级别短信服务发送平台
- 邮件监控平台搭建
- 自动化邮件报告平台-邮件发送highchart图表
- 自动化邮件报告平台-邮件发送highchart图表
- 域名解析商搭建创业平台 百万产品免费用
- 使用 Haraka 搭建邮件发送服务器
- Linux下搭建mutt+msmtp发送邮件
- Linux搭建SMTP发送邮件服务器
- 利用外部smtp发送邮件;linux发送外网邮件;搭建邮件服务器;
- 如何处理百万级别数据
- 百万级别数据库优化技巧
- POI导出百万级别数据
- 解决.NET平台邮件发送CDO.Message错误
- windows平台下通过blat发送邮件用法小结
- windows平台下 文件备份批处理和邮件发送批处理
- 纵横自媒体
- ORA-12560错误
- 模型的动画设置
- 欢迎使用CSDN-markdown编辑器
- 判断页面是否激活
- 搭建百万级别邮件发送平台
- 自定义vue全局组件use使用、vuex的使用
- JavaNIO之缓冲区(Buffers)
- xampp Apache Access forbidden! Error 403 解决方法
- 【Linux】中的线程安全和可重入函数
- Codeforces821C Okabe and Boxes
- 地区分类
- 深度学习----Tensorflow常见问题汇总
- 自定义Gradle Plugin