上次说到用 nodejs 重写一个邮件系统 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CupTools
V2EX    Node.js

上次说到用 nodejs 重写一个邮件系统

  •  1
     
  •   CupTools 2016-04-29 13:09:10 +08:00 7264 次点击
    这是一个创建于 3453 天前的主题,其中的信息可能已经有所发展或是发生改变。

    然后下文就是,开源咯

    丑陋的 installation guide

    系统架构

    现在已经跑了三个月,目前感觉良好,可以继续考虑逐步淘汰 Gmail

    第 1 条附言    2016-04-29 15:13:26 +08:00
    as of 04/29/2016 PDT ,我正在重构整个架构。先不要下来折腾,到时另行通知
    第 2 条附言    2016-04-29 16:46:12 +08:00

    好了,重构完毕。RX,Misc,和Webmail的后端整合到了一个API。Updated Guide

    第 3 条附言    2016-04-30 15:15:47 +08:00

    系统架构图:

    Dermail Architecture v2

    半完成的API文档

    33 条回复    2016-04-30 16:05:24 +08:00
    newghost
        1
    newghost  
       2016-04-29 13:14:35 +08:00
    不错呀…… 所有邮箱都能收到吗?
    信发多了会不会被新浪、网易、 QQ Block?
    emptyhua
        2
    emptyhua  
       2016-04-29 13:25:49 +08:00
    撸主好有毅力!
    qihboy
        3
    qihboy  
       2016-04-29 13:28:12 +08:00
    域名无法访问
    shellcodecow
        4
    shellcodecow  
       2016-04-29 13:47:25 +08:00
    awesome
    lizheming
        5
    lizheming  
       2016-04-29 14:23:42 +08:00
    心疼这回调…→_→ 不过页面真的很赞诶~
    domty
        6
    domty  
       2016-04-29 14:35:23 +08:00
    calllback hell...
    mufeng
        7
    mufeng  
       2016-04-29 14:36:25 +08:00
    @lizheming 回调感人
    SharkIng
        8
    SharkIng  
       2016-04-29 14:45:45 +08:00 via iPhone
    我一直很想知道有么打算把整个 sdapi.net 的构架和简单搭建情况写一些我们可以学习下的
    CupTools
        9
    CupTools  
    OP
       2016-04-29 15:12:32 +08:00
    @lizheming
    @mufeng

    回调只是我懒。到时我会在 web gui 加上自助加域名和帐号。
    CupTools
        10
    CupTools  
    OP
       2016-04-29 16:46:23 +08:00
    CupTools
        11
    CupTools  
    OP
       2016-04-29 16:46:47 +08:00
    @SharkIng 会的,太忙,有时间就写
    fds
        12
    fds  
       2016-04-29 17:09:05 +08:00   1
    哦,虽然楼主可能知道,但我还是想说,回调那里建议写成

    function tableRemove(name) {
    return function() {
    return r.table(name).delete.run(conn)
    }
    }
    tableRemove('users')()
    .then(tableRemove('domains'))
    .then(tableRemove('accounts'))
    ...
    .then(function(){
    actual(conn)
    })
    CupTools
        13
    CupTools  
    OP
       2016-04-29 17:18:07 +08:00
    @fds 我是太懒写好看...那个文件只是临时抱佛脚写出来
    fds
        14
    fds  
       2016-04-29 17:27:10 +08:00
    @CupTools 理解。一般高产的人都不会太在意这些小地方 ;p
    CupTools
        15
    CupTools  
    OP
       2016-04-29 18:54:48 +08:00 via Android
    @newghost 这是你要自己搭的 邮件会不会被 block 得看你的 ip 和 spf
    miyuki
        16
    miyuki  
       2016-04-29 19:24:35 +08:00 via Android
    发 Gmail 不会被 spam 吗
    SlipStupig
        17
    SlipStupig  
       2016-04-29 20:28:39 +08:00
    我用 python 实现了完整的 edm 系统,只是没界面,关于怎么过 spam 检测,这个国内基本上能过,不知道有没兴趣一起玩
    CupTools
        18
    CupTools  
    OP
       2016-04-29 23:35:05 +08:00 via Android
    @miyuki 不会。 outlook 都没问题
    CupTools
        19
    CupTools  
    OP
       2016-04-30 01:00:32 +08:00 via Android
    @SlipStupig 只要 IP 没被黑名单 SPF 正确 基本不会被 Spam
    SlipStupig
        20
    SlipStupig  
       2016-04-30 05:12:59 +08:00
    @CupTools 太天真你一天出 100 万邮件看看,发一两封邮件没啥意义
    CupTools
        21
    CupTools  
    OP
       2016-04-30 05:30:31 +08:00
    @SlipStupig 要是一天 100 万邮件就不要自己搭了。 ManDill, MailGun, Amazon SES 等等都比自己搭发 marketing 好。非法的话除外
    CupTools
        22
    CupTools  
    OP
       2016-04-30 05:32:06 +08:00
    @SlipStupig 国外你想过 SPAM ,几个条件:
    1. IP 没黑名单
    2. SPF 要正确
    3. DKIM 最好也有

    IP 不能是完全清白,之前要有发邮件成功的记录,那么 Outlook 就不会卡掉。 Gmail 反而不管
    SlipStupig
        23
    SlipStupig  
       2016-04-30 05:40:36 +08:00
    @CupTools 这个还是有一些方法的,这些没啥用,成本高,自己建设这块, spam 绕过我研究了很久基本上套路都摸清楚, dkim 什么 spf 这些都是找抓,你发不了太多, edm 嘛成本尽可能低,速度尽量要快,靠别人平台你一定亏,除非你是暴利,否则你这么做本都收不回来
    owt5008137
        24
    owt5008137  
       2016-04-30 08:06:15 +08:00 via Android
    相当不错啊,不知道垃圾邮件过滤怎么样?因为我发现自建 mail 服务器似乎很容易收到垃圾邮件,而且 gmail 和 outlook 这方面都做得不错
    firefox12
        25
    firefox12  
       2016-04-30 08:43:30 +08:00 via iPhone
    不太懂 不知道 pop3 smtp imap 这些协议支持吗? 这些协议是自己重新实行的吗?还是 调用别人的核心模块 有点类似使用 ie 内核开放了一个浏览器。

    如果是完全自己开发的核心模块,是否在安全性 性能上有过比较?

    只是为做了一个很炫的 UI ?我觉得作为现在邮件系统的插件系统可以让更多的人受惠。
    CupTools
        26
    CupTools  
    OP
       2016-04-30 09:22:55 +08:00 via Android
    @firefox12 SMTP 用的是 https://github.com/andris9/smtp-server 基于这个模块而写出来的一整个邮件系统。 UI 只是其中一个部件 通过 API 调用资源,浏览器渲染。

    IMAP 还在研究中 RFC 实在太复杂
    CupTools
        27
    CupTools  
    OP
       2016-04-30 09:24:21 +08:00 via Android
    @owt5008137 垃圾过滤还没有 SpamAssasin 这些是渣 不打算用他们。本来想用 nodejs 写一个 machine learning ,耗时太长,写了一半,还没成型。

    现在是靠 filter 去拦截 spam
    cchange
        28
    cchange  
       2016-04-30 11:23:35 +08:00
    经验比项目本身可能更重要
    SharkIng
        29
    SharkIng  
       2016-04-30 13:56:59 +08:00
    @CupTools 太感谢了,已经受益匪浅了 如果能有一个相对比较详细的构架解释的话就更好了
    CupTools
        30
    CupTools  
    OP
       2016-04-30 15:17:03 +08:00
    @SlipStupig :doge: 没考虑到这么多 望请多多指教
    CupTools
        31
    CupTools  
    OP
       2016-04-30 15:20:53 +08:00
    @cchange 是的。这是我第四个大型项目。

    第一个是 PHP 写的 DNS 。 4 年前写的东西,很久没维护了。
    第二个是 sdapi.net 的整个架构。从 选硬件 买硬件 拼硬件 到 拉线 装系统 装软件 跑私有云 各种服务
    第三个是 HostMyNUC 的整个管理和销售系统
    第四个是 Dermail

    其中还写过 SSH/VPN 的控制面板,当初 FreeRadius 还留行的时候,各种奸商卖梯子工具
    还有很多很多项目。唯一挣钱的还是帮一个 IDC 写个后台,直接模仿用户 Actions ,相当现在的 Phantom.js 之类。 4 年前哪有这么高级的东西,都是一行行码写出来的。
    SlipStupig
        32
    SlipStupig  
       2016-04-30 16:02:03 +08:00
    @CupTools l 留个联系方式一起交流呗
    kn007
        33
    kn007  
       2016-04-30 16:05:24 +08:00
    Star 。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1368 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 16:42 PVG 00:42 LAX 09:42 JFK 12:42
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86