发一封邮件,本质上和发一个HTTPS请求差不多:开一条TCP连接,做一次SSL握手,把数据推过去。大多数个人电脑每秒能轻松完成几千次这样的操作。那为什么有公司敢为1000封邮件收15美元?为什么中间非得插一家第三方服务商?
这个问题,一位曾在谷歌Gmail团队工作过的工程师也没想明白。他当时负责的是"标签收件箱"(把邮件分进主要、推广、社交、更新、论坛几个分类),这个角落里的工作给不了他答案。于是他决定自己动手试一遍。
他主要用Haskell写代码,需要时调用C代码处理OpenSSL和SQLite。手上已经有现成的HTTPS请求方案和HTTP 1.1消息处理代码,改造成发邮件能有多难?结果出乎意料:真正"发送"这一步并不难,难的部分根本不在他手里。
七次往返,换来一封明文邮件
发邮件用的是简单邮件传输协议(SMTP),和早期的明文HTTP 1.1一样,是个有点滑稽的纯文本协议。发送方和接收方你来我往地对话:一方说HELO、MAIL FROM,另一方回220、250这样的状态码。
按最初的协议,发一封邮件要做七次往返。那个年代还没有TLS,折腾完这一圈,连加密都没有。不过收发一堆明文本身不难,他搭好环境给自己发了一封,成功了——然后邮件进了垃圾箱。
问题出在身份上:原始协议允许你随便声称自己是谁,全世界任何人都能轻易伪造域名和发件人。所以现在得给域名加一些TXT记录,接收方可以去查evancz.dev的公钥,确认发信人至少握有私钥。他配好私钥、加上DNS记录、用OpenSSL函数处理邮件,再发一次,这回邮件进了Gmail收件箱。
只有Gmail收,Outlook连垃圾箱都不给
技术细节不难,只是有点烦人。那15美元到底贵在哪?
Elm的数据库后端进入私测阶段时,他决定自己发事务性邮件——几行Haskell加C代码建TCP连接而已。结果他发现,邮件只在Gmail里出现,用微软Outlook的人连垃圾箱都看不到。
身份验证解决之后,发信人依然可以开始群发垃圾邮件。于是他撞上了一堆古老又古怪的垃圾邮件过滤器。每家收件箱服务商的"发件人信誉"算法都不一样:
- 有的主要看发件域名——"这个域名的邮件好不好?"
- 有的更在意具体IP——"这个IP上有一个域名在发垃圾,别的域名可能也有问题。"
- 有的直接看IP段——"有人从100.0.0.0发垃圾,那整个100.0.*.*可能都有问题。"
他推测Outlook可能就属于很在意IP段的那一类,也许是没有细粒度评估单个IP的办法,也许这对"大企业"用户来说就是个好过滤器。他强调自己没有内部消息,只是从现象上看,不少收件箱服务确实如此。而且这个月是这样,下个月未必——Yahoo Mail、Zoho Mail、Proton Mail的开发者们会随着垃圾邮件的新动向不断调整。
他的服务器托管在一家较小的云厂商,能拿到对方提供的IP段。固定IP可以好好养着,但只要有收件箱在意整个IP段,同段里有人发垃圾,他的整段IP就可能被拉黑。
贵的是被信任,不是发信
他的结论是:写代码发邮件,是一次性、相对可完成的事,技术上和发HTTPS请求基本一样。但要送达各种不同的邮箱地址,你得被那些握着最古老、最古怪过滤器的收件箱服务商信任。既然有些收件箱在意IP段,你大概就得拥有自己的IP段,然后每天从里面发出相当大的量。
他的邮件能顺利进入某些收件箱,说明这些服务商有能力不必重度依赖IP段黑名单。他在谷歌做的"标签收件箱"里有人工分类,也许这类信号能帮垃圾邮件团队更好地判断域名,从而少依赖IP段黑名单——但他从没跟走廊那头的垃圾邮件团队聊过,纯属猜测。
他的探索到此为止。代码不难,难的是让全世界最挑剔的那批过滤器相信你。这大概就是那15美元里真正在卖的东西。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.