V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
jiangwei2222
V2EX  ›  分享创造

自研邮件服务-PMail

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

    由于主流的域名邮箱服务逐步停止服务,比如 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)
    40 条回复    2023-09-11 18:47:21 +08:00
    jiangwei2222
        1
    jiangwei2222  
    OP
       2023-07-30 12:05:58 +08:00   ❤️ 1
    PS:顺带吐槽一下,Golang 原生的 SMPT 协议写得太他妈粗糙了。简直坑死人。最基本的,竟然只支持很少几种编码方式,gbk 、gb2312 等中文编码均不支持。另外其他坑也一堆。

    我目测,这个包,除了我在用,应该这世界上没有第二个人在用他了。我本来想把我改了后的代码 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 。不过网页版很好用,各个平台也有开发客户端,国内也可以用。

    https://www.v2ex.com/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:商业版订阅还有)
    vsean
        15
    vsean  
       2023-07-30 15:26:44 +08:00
    jiangwei2222
        16
    jiangwei2222  
    OP
       2023-07-30 17:26:29 +08:00
    @ashong 我刚开始准备写多用户管理的,我表都是按多用户设计的。但是后面感觉工作量太大了,就没继续写多用户功能了。先写个单用户用着吧。
    hbytw1
        17
    hbytw1  
       2023-07-30 17:29:53 +08:00
    已经 star ,等完善
    jiangwei2222
        18
    jiangwei2222  
    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
    放个图?
    jiangwei2222
        24
    jiangwei2222  
    OP
       2023-07-30 20:44:49 +08:00
    @oszlso 项目里面有 dockerfile ,你自己编译一个就行
    jiangwei2222
        25
    jiangwei2222  
    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
    代码开源协议指定
    jiangwei2222
        29
    jiangwei2222  
    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 最简单方便。
    jiangwei2222
        31
    jiangwei2222  
    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 黑名单了
    jiangwei2222
        33
    jiangwei2222  
    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 四个字拼对
    其次,这玩意和邮件内容的 encoding 有啥关系?
    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
    看起来很不错啊!!
    jiangwei2222
        37
    jiangwei2222  
    OP
       2023-08-06 09:57:28 +08:00
    @wushenlun 为嘛要加 api 读,你直接读数据库不好吗
    nice2cu
        38
    nice2cu  
       2023-08-28 09:28:57 +08:00
    请问老哥,收邮件 你是咋弄的 定时去拉吗
    jiangwei2222
        39
    jiangwei2222  
    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 访问的话,需要指向哪个目录?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   977 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:58 · PVG 02:58 · LAX 10:58 · JFK 13:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.