将 IIS SMTP Pickup 文件夹公开为文件共享 - 坏主意?

Lar*_*man 7 email-server smtp iis-6

环境:

  • IIS 网络农场
    • 5台服务器
    • 视窗服务器 2008 R2
    • IIS 7.5
    • ASP.NET 3.5 和 4.0 Web 应用程序

我们的网络应用程序和许多应用程序一样,需要发送邮件。只发送,不接收。

过去,我们在每个 Web 服务器上都启用了 IIS 6 SMTP 服务,并使用 .NET SMTP 类将邮件文件放入拾取文件夹中。工作正常。

为了简化环境并在 Web 服务器上运行更少的服务,我正在考虑仅在一个实用的 Windows 服务上运行 SMTP 服务的可行性,并使用文件共享。ASP.NET Web 应用程序将简单地将它们的邮件文件放在共享的拾取文件夹中,并且单个 SMTP 服务将处理所有 Web 服务器的外发邮件流。我不担心 SMTP 服务的容量或能力跟上,这不会成为问题。

优点:

  • 简化的管理和配置
  • 降低 Web 服务器上的负载和攻击向量
  • 出现邮件问题时的单点故障排除

缺点:

  • 单点故障
  • 如果我需要重新启动实用程序框,我将失去出站邮件功能。这可能可以通过对 Web 服务器上的文件共享使用脱机文件夹缓存来缓解。尚未对其进行测试,但可能是网络服务器检测到没有与文件共享的连接,可以在本地删除它们的文件,以便在重新启动时自动同步到 SMTP 服务器。
  • 电子邮件文件名冲突 - 需要确保 ASP.NET 在写入 .eml 文件时,在整个 Web 场中使用有保证的唯一名称。SmtpClient 源代码表明 GUID 用于命名文件,但 MS 可能会在未来的实现中更改它。

这会起作用吗?

编辑:更多地考虑我对离线文件的想法,我不确定这是最好的方法。脱机文件需要一个计划任务来安排同步,每次运行时,我都会在每个其他服务器的本地缓存中提取所有其他 Web 服务器的邮件文件。也许更好的主意是将文件堆积在本地文件夹中,并且其他一些作业(计划的 robocopy)尝试在它启动时将它们复制到远程文件共享。曾考虑过 DFSR,但同样,我会将所有邮件文件移动到所有 Web 服务器,这很浪费。

Chr*_*wis 2

更好的选择是通过 tcp/ip 使用 SMTP,即侦听端口 25(或任何其他端口),然后使用 System.Net.Mail 的 MailMessage 和 SmtpClient。

然后,您可以在 SMTP 服务器前面放置一个负载平衡器,并让每个服务器连接到该负载平衡名称/IP。