【问题标题】:Accept All Incoming Email Messages on Server接受服务器上的所有传入电子邮件
【发布时间】:2009-11-26 17:01:49
【问题描述】:

我想写一些电子邮件扫描软件,但不知道如何设置我的服务器。我有一个运行 Windows 2003 Server 的托管 Web 服务器。它正在运行具有完全限定域名 abcdef.com(示例)的默认 SMTP 虚拟服务器。 DNS 将 abcdef.com 指向我的服务器。如果我从我的台式电脑欺骗了一封电子邮件,使它看起来来自 info@abcdef.com,然后我将电子邮件发送到一个“不存在”的电子邮件地址,那么退回邮件确实到达了我的 Web 服务器并存储在 C 中服务器上的 :\inetpub\mailroot\Queue - 太棒了! (我可以扫描它并处理反弹)。但是,如果我只是直接向 info@abcdef.com 发送电子邮件,那么它似乎不会被放置在服务器上的任何位置。我不明白为什么退回的邮件会被存储,但其他传入的电子邮件却没有。我很想避免在服务器上安装任何“电子邮件服务器软件”,因为我希望尽可能保持干净。我真正想要的只是告诉服务器接受所有传入 abcdef.com 的消息,以便我可以自己处理它们,并将 .eml 文件放在我可以扫描的已知目录中。然后我将编写一个 eml 文件解析器来处理这些文件。 非常感谢。

【问题讨论】:

    标签: email smtp


    【解决方案1】:

    未交付的一个可能原因是您的域有 DNS A 记录,但没有 DNS MX 记录。 MX 记录用于传递邮件。从历史上看,如果域没有 MX 记录,邮件服务器应该回退到寻找域的 A 记录。

    在您的情况下,我猜您的本地邮件发送软件正在寻找 MX 记录,如果找不到则停止,而向您发送退回邮件的远程系统正在寻找 MX 记录并且然后在找不到的时候寻找A记录。

    MX records 上的维基百科文章有更多详细信息。

    【讨论】:

    • 按理说已经有合适的 MX 记录了,因为 SMTP 服务器从 OP 的第一次试用接收到传递失败消息(使用 abcdef.com 域中的地址作为 From: 地址电子邮件,然后将其发送给不存在的收件人)- 目标域的邮件服务器知道将邮件退回到哪里的唯一方法是通过 MX 记录。要么这个,要么 OP 正在使用这个 SMTP 服务器尝试在第一次试用中传递消息,并且目标服务器在带内拒绝它。
    • delfuego,没有。测试 1 使用欺骗 From: info@abcdef.com 到远程域。测试 2 是直接发送至 info@abcdef.com 的邮件。这两个测试导致两封邮件被定向到 abcdef.com,(可能)来自不同的邮件服务器。当其中一个邮件服务器找不到 MX 记录而另一个没有找到时,它可能会回退到使用 A 记录。有关回退到 A 的详细信息,请参阅链接的 Wikipedia 文章。可以将邮件传递到没有 MX 记录的域(实际上,它应该工作,因此任何不这样做的 MTA 都是错误的到 RFC5321)。
    • 从下面 OP 的评论回复中,我认为第一个测试使用这个 SMTP 服务器来传递消息的,所以这就解释了为什么它最终保留在队列。但最后,还是无所谓;核心问题是 MS SMTP 服务器是一个 MTA,它没有能力将邮件传递到邮箱或用户,只能将其从 SMTP 客户端传递到 SMTP 服务器(这可能更健壮并且能够将其传递到邮箱或通过 POP、IMAP、Exchange 或其他具有这些功能的服务器的用户)。
    • Jon,感谢您提供有关 A fallback 的信息——我已经完全忘记了这种行为!
    【解决方案2】:

    SMTP 是一种消息传输代理 (MTA),仅负责处理从一个点(可能是客户端)到另一个点(邮箱服务器,例如 POP 或 IMAP 服务器)的邮件传输。 SMTP 服务器不是最终处理进入域的邮件的正确工具——它们只处理将进入域的邮件传输到另一个应用程序,例如前面提到的 POP 或 IMAP 服务器,然后它们知道如何排序和存储它邮件。

    简而言之,默认 SMTP 虚拟服务器不是您正在为您的项目寻找的工具。

    this other StackOverflow question 看来,有一些 SMTP 服务器旨在用于开发用途,但它们可能满足您寻求的目的——它们接受传入的消息,然后将它们写入文件(以某种方式,并使用一些调整)。

    【讨论】:

    • 好的,所以也许我不应该提到 SMTP。但是,退回的电子邮件被放置在 C:\inetpub\mailroot\Queue 中,那么为什么没有将发往 {anything}@abcdef.com 的其他邮件放置在那里,我如何告诉服务器将它们放置在那里?
    • 错误消息被存储是因为你在谈论两个不同的事情,传出电子邮件和传入电子邮件。 “退回的”消息是您尝试从 SMTP 服务器发送 out 的消息。当您的服务器连接到目标域的服务器并尝试传递消息时,目标服务器会说“没有这样的用户”;然后,您的服务器将消息留在您的传出队列中,以便管理员可以处理它。 传入邮件完全不同,正如我所说,您选择的服务器——纯 SMTP 服务器——不处理传入的电子邮件。
    • 这里我还是一头雾水!我不想获取我生成的电子邮件 - 我想访问发送到 abcdef.com 的所有电子邮件。我了解 SMTP 用于“出站”电子邮件 - 我需要处理入站电子邮件。我正在寻找配置我的服务器的最轻量级的方法,以便将入站电子邮件(来自 Internet 上的任何地方)存储在服务器上文件系统的某个位置。我是否必须使用某种描述的 MailServer,或者我可以以某种方式配置服务器,以便将任何入站电子邮件简单地写入服务器的文件系统?
    • 再一次强调,默认 SMTP 虚拟服务器不是您要寻找的工具——它并不能满足您的需求。您需要另一款软件,用于处理入站邮件并将其保存到您打算处理的文件中。如果您查看我帖子的最后一段,您会看到另一个 Stack Overflow 帖子的链接,该帖子提供了一些选项。
    【解决方案3】:

    好的,现在开始工作。问题如下:

    1. 没有 MX 记录,因此没有将外部电子邮件定向到服务器。存在于服务器上的 .EML 文件确实是由出站电子邮件进程放置在那里的。
    2. 防火墙阻止了端口 25 - 现在已打开。
    3. 必须在服务器上运行某种入站电子邮件服务。 Windows Server 有一个轻量级的 POP3 服务,您可以将其配置为将所有传入的电子邮件放入一个“包罗万象”的邮箱中。这会填充 .EML 文件,然后我们的自定义服务可以对其进行扫描。

    非常感谢 delfuego 和 Jon。

    【讨论】:

    • 我想说 delfuego 和 Jon 一起回答了这个问题,但我只能将答案分配给其中一个 - 对吗?
    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多