做了四个月的邮件系统,准备修改为开源版本,收集意见中~

2014-09-13 11:29:28 +08:00
 vincenting
做这个项目的初衷很简单,很多人吐槽mailgun、sendcloud的独立IP价格略贵,同时mailgun不能有效的去兼容特别是QQ的发送规则,目前的产品形态参加 http://jianxin.io/ (应该会在下面的某天关闭),简单介绍下现在的设计以及准备修改并且开源的版本。

当前功能(忽略各种用户体系):

1. 自动生成 dkim 的记录值,并检测 dns 情况。
2. 邮件分为普通邮件和紧急邮件,其中普通邮件为根据队列发送的邮件,紧急邮件为立刻发送的邮件。
3. 发送中遇到错误,分析是否为用户不存在,否则暂停发送一段时间后继续发送。
4. 支持 SMTP 协议以及 HTTP 协议的接口调用,并可选使用长连接直接返回邮件发送结果。

目前想到的开源版的功能:

1. 去除目前的用户体系,将域名添加变成域名和发送IP添加(可以使用自己的VPS进行发送,并且可以绑定反向域名解析)。
2. 增加针对收件域(例如 QQ)的发件频率控制。
3. 更丰富的日志。

如果想了解邮件发送的原理,可以参考我之前写的帖子 : http://blog.segmentfault.com/vincent/1190000000661065

当前的代码结构:

1. 发送器(golang实现),postfix 或者 nodemail 同等级的服务。负责邮件任务的处理(邮件队列、邮件的投递、以及邮件返回错误的初步处理(判断是否为收件人不存在))。
2. 服务分发(golang实现),目前主要负责和发送器间的通讯,以及发送器健康状况的检测。
3. API 服务(Ruby的cramp实现),HTTP 调用方式的请求服务,包括发邮件、获取发送列表、当前用户状态等等的接口。
4. 业务服务(Ruby的sinatra实现),就是你可以看到的网站自身。
5. MTA(Nodejs实现),负责将SMTP协议的请求转发给 API 服务。

思考了好久才决定转化为开源产品,如果有负责过邮件的前辈,希望分享下曾经遇到过的其他问题,大家一起来打造一款更好的开源邮件服务。
14116 次点击
所在节点    程序员
73 条回复
nilai
2014-09-13 13:40:02 +08:00
楼主什么时候开源呢? 期待呢
qiuai
2014-09-13 14:05:15 +08:00
如果安装方便的话,我要用.
mengzhuo
2014-09-13 14:13:54 +08:00
发送的话,还差SPF DMARC报告收信

SMTP需要STARTTLS加密
API也需要SSL加密
dbbbit
2014-09-13 14:35:03 +08:00
@vincenting
其实也没必要针对qq做太多的调整,能控制频率,控制量就行了。
说到底,能发多少还是要看自己在qq那儿的额度。
我之前优化过的邮件服务器,一天对qq能发七到八万,但还是不够。
用户中qq邮件用户占了绝大多数。

不知到你们对日志的是否做统计处理?
个人觉得统计对于了解发送情况并调整发送策略非常有用。
liteneo
2014-09-13 14:36:19 +08:00
非常赞
qiuai
2014-09-13 14:40:47 +08:00
@vincenting 我试用了现在的简信,很喜欢的模式.
但是在测试发送时,执行提示 {"code":405,"msg":"Secret expired."} 代码是从 php Version里直接复制出来的.什么地方错了呢?
vincenting
2014-09-13 15:10:24 +08:00
@dbbbit 统计就是主要就是想结合 QQ 邮箱自身的服务,包括 “他域互通管理” http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=20006&&no=1000938 以及 “垃圾邮件举报反馈系统” 系统来进行调整。

系统这里可以来进行发送频率控制,遇到发送错误,如果鉴定为非用户不存在(自己整理了一个关键字列表)的情况,然后有一个相应的尝试机制。

恩,很赞成统计(反馈)的重要性~
vincenting
2014-09-13 15:11:36 +08:00
@nilai 先整理下开源版的设计,然后在现有系统的基础上进行修改。
代码随着新版的开发同步开放出来。
lazyphp
2014-09-13 15:22:43 +08:00
很不错啊!支持楼主开源。
Yien
2014-09-13 15:26:15 +08:00
期待
blueandhack
2014-09-13 15:28:01 +08:00
支持开源
哈~爱滴滴~非科班出生,现在挺牛的啊~
dbbbit
2014-09-13 15:31:14 +08:00
@vincenting
虽然qq邮箱用户可能占到大多数,但是最好避免过分重视qq邮箱。
结合 QQ 邮箱自身的服务固然不错,但只是加分项。
其他邮件服务比如 163等的额度往往比qq 还要低很多(虽然相应的用户不多)
日志统计其实已经能够获得除用户举报等信息外的全部信息,打开率也应该有自己的统计方法。
更一般的做法就是从日志来获取反馈,postfix 或者 nodemail应该都有详细的日志和统计插件可用。(避免很多不必要的开发)

发送错误的情况,如果邮件量比较大(出错占的比例较小),视邮件重要性有可配置的尝试次数。
因为尝试会消耗你的发信额度,一般宣传邮件失败可直接丢弃。
humiaozuzu
2014-09-13 15:31:32 +08:00
请教下验证码服务是如何实现的?
gangsta
2014-09-13 15:40:52 +08:00
页面设计很赞!
lhbc
2014-09-13 15:51:26 +08:00
支持RADIUS/LDAP验证吗?还有两步验证,SMTP/POP/IMAP等服务支持专用密码,类似gmail的应用密码。
hustlzp
2014-09-13 17:02:29 +08:00
LZ太强悍了,前后端、设计什么的都自己做,而且做的都很赞!
atie
2014-09-13 17:17:52 +08:00
界面真得不错!
vincenting
2014-09-13 17:36:08 +08:00
@humiaozuzu 图片生成使用imagemagick,大概思路:
1. 随机出题目(随机符号,然后随机第一个数字、随机第二个数字)
2. 随机将部分数字变成文字
3. 随机字体和颜色

由于代码企业也在用,所以就不方便开源了
vincenting
2014-09-13 17:37:02 +08:00
@blueandhack 哈哈,掐指一算三年多了。
vincenting
2014-09-13 17:54:34 +08:00
@lhbc 恩,MTA模块就是提供Gmail的STMP使用账号发送的功能,只是网站上没有体现出来~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/133221

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX