自研邮件服务-PMail - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
AutumnVerse
V2EX    分享创造

自研邮件服务-PMail

  •  3
     
  •   AutumnVerse 2023-07-30 11:59:24 +08:00 5909 次点击
    这是一个创建于 852 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于主流的域名邮箱服务逐步停止服务,比如 qq 邮箱、outlook 邮箱。剩下的基本上都是一些企业邮箱,使用一堆限制,因此开始自建。

    刚开始我使用的是 Poste ,使用 docker 部署,但是 docker pull 一拉,我丢,几个 G 的磁盘空间没了。我自己用的服务器只有 10G 磁盘空间,根本装不下这玩意。于是我尝试精简一下,结果发现复杂得要死,根本没法动。

    然后我又找了好几个邮箱服务程序,结果都写得罗里吧嗦的,依赖一堆中间件,空间、内存占用一个比一个高。我就奇了怪了,邮件这么简单一个协议,怎么就被写得这么复杂了。

    于是自己动手,使用 Golang 自己手撸了一个邮件服务。后端所有依赖都尽可能的使用 Go 官方的,前端使用了 vue3+element 。

    优势:

    1 、部署简单 使用 Go 语言编写,支持跨平台,编译后单文件运行,单文件包含完整的前后端代码。修改配置文件,运行即可。仅依赖 MySQL ,所有数据均存储在 MySQL 中。

    2 、资源占用极小 编译后二进制文件仅 15MB ,运行过程中占用内存 10M 以内。

    3 、安全方面 支持 dkim 、spf 校验。正确配置的情况下,Email Test 得分 10 分。

    4 、邮箱前缀 既然是域名邮箱,前缀就不重要了,收发邮件均可使用任意前缀。

    5 、插件支持 关键位置都留了插件 hook 点,你可以根据需要开发插件。目前写了一个微信 push 插件,收信后通过微信公众号 api 推送

    其他

    目前我已经用了一个多月,用来收发验证码,国内各种银行、各个 app 的、海外各种 app 的,均正常使用。

    收发邮件是否成功,是否进垃圾箱与邮箱程序无关,在正确配置 dkim 、spf 后,只与你的 ip 、域名有关。我自己服务器是搬瓦工美西机房的。这个 IP 我自己已经用了 7 年多了,收发邮件没任何拦截。拿主流邮箱( gmail 、qq 、163 、outlook 、阿里企业邮箱、飞书邮箱)测试过,均正常收发。

    目前差个 logo ,另外前端界面写得很差,欢迎有兴趣的小伙伴提 PR

    项目地址: https://github.com/Jinnrry/PMail

    第 1 条附言    2023-07-30 20:48:52 +08:00
    补个图片,[!img]( %20%20)
    41 条回复    2025-07-25 11:33:22 +08:00
    AutumnVerse
        1
    AutumnVerse  
    OP
       2023-07-30 12:05:58 +08:00   1
    PS:顺带吐槽一下,Golang 原生的 SMPT 协议写得太他妈粗糙了。简直坑死人。最基本的,竟然只支持很少几种编码方式,gbk 、 等中文编码均不支持。另外其他坑也一堆。

    我目测,这个包,除了我在用,应该这世界上没有第二个人在用他了。我本来想把我改了后的代码 push 给 go 官方的。但是 go 的提交流程太繁琐了,最后放弃了,直接 copy go 源码到项目里面改了
    amlee
        2
    amlee  
       2023-07-30 12:32:36 +08:00
    好东西
    kaikai5601
        3
    kaikai5601  
       2023-07-30 12:42:48 +08:00 via iPhone   3
    由于主流的域名邮箱服务逐步停止服务,比如 qq 邮箱、outlook 邮箱

    哪里得出的结论
    Gtristan
        4
    Gtristan  
       2023-07-30 12:55:01 +08:00 via iPhone
    好东西,晚点回去试试,一直在鼓捣这方面,收了
    Champa9ne
        5
    Champa9ne  
       2023-07-30 12:55:44 +08:00
    iredmail 不错,也是开源支持自部署的
    lhx2008
        6
    lhx2008  
       2023-07-30 12:56:57 +08:00
    为何要改 go 代码,再弄出一个 SMPT 库不挺好
    akira
        7
    akira  
       2023-07-30 12:57:35 +08:00
    确实是,之前用过 一些 自建邮箱,部署维护起来都好麻烦
    Yien
        8
    Yien  
       2023-07-30 13:44:19 +08:00
    Postal 你值得拥有
    ashong
        9
    ashong  
       2023-07-30 14:45:40 +08:00
    看起来比以往的简单, 希望继续完善用户管理, 多一个选择总是好的
    StuPYX
        10
    StuPYX  
       2023-07-30 14:49:50 +08:00
    @kaikai5601 #3 他应该说的是 QQ 域名邮箱,和 Outlook 自定义域名邮箱,QQ 域名邮箱确实早停止新增域名和邮箱,Outlook 不知道
    Ccf
        11
    Ccf  
       2023-07-30 14:50:48 +08:00
    已经 star ,等完善
    t41372
        12
    t41372  
       2023-07-30 15:17:32 +08:00 via Android
    Skiff 还可以用免费的域名邮箱,不过因为是端到端加密的,所以没有 smpt 。不过网页版很好用,各个平台也有开发客户端,国内也可以用。

    t/956615
    mschultz
        13
    mschultz  
       2023-07-30 15:20:58 +08:00
    @kaikai5601 #3
    @StuPYX #10
    https://support.microsoft.com/en-us/office/changes-to-microsoft-365-email-features-and-storage-e888d746-61e5-49e3-9bd1-94b88e9be988

    > Starting November 30, 2023, Microsoft 365 Personal or Microsoft 365 Family subscribers will no longer be able to create a new email address for any personalized domain associated with their Outlook.com mailbox.
    xuc
        14
    xuc  
       2023-07-30 15:22:38 +08:00
    @StuPYX 从 2023 年 11 月 30 日开始,Microsoft 365 个人版 或 Microsoft 365 家庭版 订阅者将无法再为其 Outlook.com 邮箱关联的任何个性化域创建新的电子邮件地址。( PS:商业版订阅还有)
    iFrey
        15
    iFrey  
    PRO
       2023-07-30 15:26:44 +08:00
    AutumnVerse
        16
    AutumnVerse  
    OP
       2023-07-30 17:26:29 +08:00
    @ashong 我刚开始准备写多用户管理的,我表都是按多用户设计的。但是后面感觉工作量太大了,就没继续写多用户功能了。先写个单用户用着吧。
    hbytw1
        17
    hbytw1  
       2023-07-30 17:29:53 +08:00
    已经 star ,等完善
    AutumnVerse
        18
    AutumnVerse  
    OP
       2023-07-30 17:32:09 +08:00
    @lhx2008 因为我以前没用过,刚开始觉得官方库应该没啥问题,结果越写坑越多。再到后面想换也换不了了,所有方法都是按官方库的设计写的。就只能 copy 一份自己改了
    yaott2020
        19
    yaott2020  
       2023-07-30 17:41:52 +08:00 via Android
    楼主 webui 放个图?
    xiangyuecn
        20
    xiangyuecn  
       2023-07-30 18:07:30 +08:00
    收藏,早些年也爱折腾自建邮件服务器,.Net Framework 自带的 smtp 也有字符编码问题,陈年 bug 后面也是提交了一个代码给他们修复了,感觉这种底层功能压根没多少人会去直接调用
    oszlso
        21
    oszlso  
       2023-07-30 18:12:41 +08:00
    期待传到 dockerhub
    deorth
        22
    deorth  
       2023-07-30 18:15:37 +08:00 via Android   4
    这帖牛的,硬是让我质疑了一下自己到底是 smtp 还是 smpt 。这可是我每天打交道的协议
    kebamt
        23
    kebamt  
       2023-07-30 20:42:52 +08:00
    放个图?
    AutumnVerse
        24
    AutumnVerse  
    OP
       2023-07-30 20:44:49 +08:00
    @oszlso 项目里面有 dockerfile ,你自己编译一个就行
    AutumnVerse
        25
    AutumnVerse  
    OP
       2023-07-30 20:49:17 +08:00
    @kebamt 添加图片了
    justincnn
        26
    justincnn  
       2023-07-30 21:01:44 +08:00
    gmail 保平安
    oIMOo
        27
    oIMOo  
       2023-07-30 21:25:49 +08:00
    @t41372 #12 本来想把个人邮箱换到这个平台,然而很多功能不齐全,提交给了官方,迟迟没有等来更新。
    - 收到日历邀请的邮件,没有任何选项、也不显示 ics 文件,前者必须去日历里操作,后者比如导出邮件才能看到
    等等
    Steaven
        28
    Steaven  
       2023-07-30 21:26:07 +08:00
    代码开源协议指定
    AutumnVerse
        29
    AutumnVerse  
    OP
       2023-07-30 22:34:18 +08:00 via Android
    @Steaven 指定了,使用 GPL 开源协议
    WhatTheBridgeSay
        30
    WhatTheBridgeSay  
       2023-07-31 05:42:08 +08:00   1
    虽然楼主造轮子的精神可嘉,但是有没有可能,现在你想要实现的收发信功能都是分离开的,IMAP 确实没有什么太好的 self-hosted 解决方案,但是你可以用转发服务啊,发信就更简单了,免费 SMTP/API 不要太多,self-hosted 主要还隔着一个固定 IP 信誉的问题,就单纯你这种用作账号注册用途的话直接用 simplelogin 最简单方便。
    AutumnVerse
        31
    AutumnVerse  
    OP
       2023-07-31 09:11:02 +08:00 via Android
    @WhatTheBridgeSay 我当然知道有转发,而且我用过很长一段时间的转发。真正用了以后会发现,破问题一堆
    mengzhuo
        32
    mengzhuo  
       2023-07-31 09:14:24 +08:00   1
    邮件服务最大的问题是个人架设的服务器可能是大邮件商的 ip 黑名单了
    AutumnVerse
        33
    AutumnVerse  
    OP
       2023-07-31 09:18:05 +08:00 via Android
    @mengzhuo 我自己有使用 7 年多的 ip ,所有服务商均正常收发,如果没干净 ip 的话,那确实没办法。
    julyclyde
        34
    julyclyde  
       2023-07-31 15:54:55 +08:00
    @jiangwei2222 首先,把 SMTP 四个字拼对
    wushenlun
        35
    wushenlun  
       2023-08-01 14:28:14 +08:00 via Android
    加个读写邮件 api 吧,我想直接对接 chatgpt
    hong2351
        36
    hong2351  
       2023-08-01 21:50:58 +08:00
    看起来很不错啊!!
    AutumnVerse
        37
    AutumnVerse  
    OP
       2023-08-06 09:57:28 +08:00
    @wushenlun 为嘛要加 api 读,你直接读数据库不好吗
    nice2cu
        38
    nice2cu  
       2023-08-28 09:28:57 +08:00
    请问老哥,收邮件 你是咋弄的 定时去拉吗
    AutumnVerse
        39
    AutumnVerse  
    OP
       2023-09-05 12:32:08 +08:00 via Android
    @nice2cu 这是一个完整的邮箱服务器,拉什么拉?
    Gtristan
        40
    Gtristan  
       2023-09-11 18:47:21 +08:00
    忘记安装 nginx 了,重新配置 ip 访问的话,需要指向哪个目录?
    humbass
        41
    humbass  
       126 天前
    最近有朋友要搭邮箱,过了两年看到这个帖子,这个项目有长期迭代吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2754 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 11:09 PVG 19:09 LAX 03:09 JFK 06:09
    Do have faith in what you're doing.
    ubao msn 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