V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ggvm
V2EX  ›  程序员

自建 smtp 发送服务中难点踩坑解决

  •  
  •   ggvm · 2022-06-24 19:10:52 +08:00 · 2235 次点击
    这是一个创建于 874 天前的主题,其中的信息可能已经有所发展或是发生改变。
    必要性介绍
    因为信息保密的需要,或者担心竞争对手获取和分析自己邮件中的商业秘密,有一些项目不方便使用腾讯、网易、Amazon 和 mailgun 等服务发送敏感信息。于是产生了自建 smtp 邮件服务器直接向外发送邮件的需求。

    这里对自建 smtp 邮局对外发送邮件的一些坑进行总结,希望对需要的朋友有点帮助

    smtp 协议简介
    最新 SMTP 协议 RFC5321 地址: https://tools.ietf.org/html/rfc5321

    smtp ,简单邮件传输协议,是一个 80 年代起就广泛使用的基于 TCP 使用 ASCII 字符来传输信息的协议。

    网络主机 A 向 B 发送信息,A 可以连接 B 的 25 端口,然后明文发起一串 ascii 字符的会话,达到将信息从主机 A 传输到 B 的任务。

    出现多媒体的时候,就用 MIME 格式来表示二进制数据。

    SMTP 会话例子
    C client S Server

    C telnet S 的 25 端口

    S: 220 smtp.abc.com ESMTP Postfix
    C: HELO me.com
    S: 250 smtp.abc.com, OK
    C: MAIL FROM:<[email protected]>
    S: 250 Ok
    C: RCPT TO:<[email protected]>
    S: 250 Ok
    C: DATA
    S: 354 End data with <CR><LF>.<CR><LF>
    C: From: "Bob" <[email protected]>
    C: To: Alice <[email protected]>
    C: Date: Tue, 15 Jan 2008 16:02:43 -0500
    NICE TO MEET YOU
    C: .
    S: 250 Ok: queued as 12345
    C: QUIT
    S: 221 Bye
    这么简单的 ascii 文字交互,几乎就是邮件发送的全部细节。

    SMTP 挑战和坑
    既然邮件发送是这么简单,而且没有太多的硬性成本,所以垃圾邮件的泛滥在所难免。所以在多年后的今天,我们自己想搭建一个 smtp 服务发送一些类似于验证码的邮件,会显得这么困难。

    下面我们提到一些坑

    域名方面
    很多 SMTP 发送邮件的坑,都发生在域名这里,所以对域名设置一定准确。

    1 域名非主流

    有的朋友使用 .cc .tk .ml 等域名来注册邮局发送邮件。虽然 RFC 协议并没有说不可以使用这些域名。但域名的歧视依然存在,特别是很多垃圾发送者使用免费的 TK ML 等国家域名来发送邮件的时候,你再使用这些免费域名,肯定遇到很多莫名其妙的拦截

    2 没有做 PTR 解析

    PTR ,也称为 rDNS ,例如 cloudflare.com 的域名 A 记录解释指向 1.1.1.1 ,如果 1.1.1.1 的域名的 rDNS 也可以指向 cloudflare.com ,那么我们说 1.1.1.1 PTR 的记录是 cloudflare.com

    可以为 IP 加上 PTR 记录,这个就是向邮件服务提供商表明了这个 IP 是被你的域名所拥有的,这有利于提升 IP+域名的权重

    查询 ptr 记录的方法:

    host -t PTR 1.1.1.1 ( linux )

    不知道什么原因,全文发 V2EX 会导致账号来临时封禁,应该没有什么敏感词。有兴趣的可以到这里看全文:

    https://zhuji188.com/%e8%87%aa%e5%bb%basmtp%e9%82%ae%e5%b1%80%e5%8f%91%e9%80%81%e9%82%ae%e4%bb%b6%e7%9a%84%e4%b8%80%e4%ba%9b%e5%9d%91/
    10 条回复    2022-06-25 10:37:39 +08:00
    TomChaai
        1
    TomChaai  
       2022-06-24 20:08:30 +08:00
    总觉得这不就是公司 IT 部门本职工作嘛,自己雇个 Exchange admin ,买套 Exchange Server 软硬件来搭建就是了。
    ggvm
        2
    ggvm  
    OP
       2022-06-24 20:15:58 +08:00
    @TomChaai 一件事情有很多解决方案。你说的是一个不错的方法。我提供的是一些自己动手解决问题的方法。 买了 exchange server 后,没有基础知识出错之后,也只能去 baidu
    xiangyuecn
        3
    xiangyuecn  
       2022-06-24 20:16:35 +08:00
    有一些项目不方便使用腾讯、网易、Amazon 和 mailgun 等服务发送敏感信息。于是产生了自建 smtp 邮件服务器直接向外给腾讯、网易、Amazon 和 mailgun 等邮箱发邮件。

    总感觉哪里怪怪的。
    kongkx
        4
    kongkx  
       2022-06-24 20:24:19 +08:00 via iPhone
    docker mailu ,处理一下 DNS ,同样是 racknerd 的主机。目前没遇到什么问题
    PMR
        5
    PMR  
       2022-06-24 20:44:51 +08:00 via Android
    软文
    Rn 的口碑人尽皆知

    网站还是做 vps 测评的 Content farm
    ggvm
        6
    ggvm  
    OP
       2022-06-24 22:12:13 +08:00
    @PMR 并不是 content farm ,是一个手工打造的记录博客,不信你自己看看。
    ggvm
        7
    ggvm  
    OP
       2022-06-24 22:14:57 +08:00
    @xiangyuecn 真实案例:有邮件的大厂会分析小厂接收到的注册邮件数量来估算小厂的业务情况。这个虽然不可避免,但不代表什么都不做。
    ggvm
        8
    ggvm  
    OP
       2022-06-24 22:16:14 +08:00
    @kongkx 好的 docker 镜像真的可以帮忙解决很多问题。谢分享
    esile
        9
    esile  
       2022-06-25 01:07:57 +08:00
    rn 机房 ip 默认在垃圾邮件黑名单列表
    ggvm
        10
    ggvm  
    OP
       2022-06-25 10:37:39 +08:00
    @esile 并不是全部
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2075 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:15 · PVG 00:15 · LAX 08:15 · JFK 11:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.