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

自研邮件服务-PMail

  •  3
     
  •   jiangwei2222 · 279 天前 · 4541 次点击
    这是一个创建于 279 天前的主题,其中的信息可能已经有所发展或是发生改变。

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

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

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

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

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


    http://www.vxiaotou.com