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

Modified on: Wed, 14 Aug 2019 02:40:02 +0800

环境:

  • IIS Web Farm

    • 5台服务器
    • Windows Server 2008 R2
    • IIS 7.5
    • ASP.NET 3.5和4.0 Web应用程序

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

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

为了简化环境并在Web服务器上运行更少的服务,我正在考虑仅在一个实用程序Windows服务上运行SMTP服务的可行性,并将拾取目录暴露给其他Web服务器使用文件共享的服务器场。 ASP.NET Web应用程序将简单地将其邮件文件放在共享的拾取文件夹中,单个SMTP服务将处理所有Web服务器的传出邮件流。我并不担心数据量或SMTP服务跟上的能力,这不会是一个问题。

专业人士:

  • 简化管理和配置
  • 降低Web服务器上的负载并减少攻击媒介
  • 如果存在邮件问题,则单点故障排除

缺点:

  • 单点故障
  • 如果我需要重新启动实用程序框,则会丢失出站邮件功能。通过对Web服务器上的文件共享使用脱机文件夹缓存,可以减轻这种影响。尚未对其进行测试,但可能是Web服务器(无法检测到与文件共享的连接)可能会在本地丢弃文件,并在重新启动时自动同步到SMTP服务器。
  • 电子邮件文件名冲突 - 需要确保ASP.NET在写入.eml文件时使用整个Web场中的保证唯一名称。 SmtpClient源代码表示GUID用于命名文件,但MS可以在以后的实现中更改它。

这会有效吗?

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

最佳答案

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

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


相关问答

添加新评论