环境:
我们的networking应用程序,像许多,需要发送邮件。 只发送,不接收。
过去,我们在每个Web服务器上启用了IIS 6 SMTP服务,并使用.NET SMTP类将邮件文件放在拾取文件夹中。 工作正常。
为了简化环境并在Web服务器上运行较less的服务,我正在考虑只在一个实用程序Windows服务上运行SMTP服务的可行性,并将拾取目录暴露给服务器场中其他Web服务器文件共享。 ASP.NET Web应用程序将简单地将其邮件文件放在共享的拾取文件夹中,单个SMTP服务将处理所有Web服务器的传出邮件stream。 我并不担心卷或SMTP服务的能力,这不会是一个问题。
优点:
缺点:
这会工作吗?
编辑:思考更多关于我的脱机文件的想法,我不知道这是最好的办法。 脱机文件需要一个计划的任务来安排同步,每次运行时,我将拉动所有其他Web服务器的邮件文件,每隔一个服务器的本地caching。 也许更好的办法是将文件堆积在本地文件夹中,而其他一些作业(计划的robocopy)会尝试将文件复制到远程文件共享中。 曾经想过DFSR,但是我再一次将所有的邮件文件洗牌到所有的networking服务器,这是浪费。
最好的办法是通过TCP / IP使用SMTP,即监听端口25(或任何其他端口),然后使用System.Net.Mail的MailMessage和SmtpClient。
然后,您可以在SMTP服务器前面引入负载均衡器,并让每台服务器连接到该负载均衡的名称/ IP。
我在这里看不到你的观点。 您尝试通过引入更多的复杂性和安全问题来简化您的设置。
SMTP是您的问题的解决scheme。 现在你只需要寻找一个好的实现。 SMTP带有内置队列处理(无文件名冲突),抗故障,由于多个MX而具有冗余意识,并且是一个久经考验的协议。 顺便说一下,它是独立于操作系统。
您希望通过单点故障,依赖于调度程序,操作系统绑定,未logging的和新的未经testing的重新发明轮子程序来交换此信息。 此外,您还为每个人展示了一个drop-in-box,不仅包含这5台服务器。
使用Web服务器上的简单存储转发服务器(如E-MailRelay )和邮件转发到的中央SMTP服务器。 这个SMTP服务器将被用于最终交付。 然后,您可以确保您的中央SMTP仅接受来自这5台服务器的连接,并执行基于发件人的拒绝或您希望为公众减less潜在(垃圾邮件)风险的任何filter/阻止。
此解决scheme具有透明度(日志logging+监视),简单性(一个进程),一致性(标准Internet协议)和完整性(交付确认)的所有优点。 没有必要交换它自制的解决方法。