在Windows Server 2008上的IIS 7下设置SMTP

时间:2008-10-22 16:47:52

标签: iis iis-7 smtp

网站最初的生命始于IIS 6,网站在那里运行良好。现在,在重新定位到运行W2K8S的新服务器之后,除了IIS 7之外,从网站发送邮件的所有内容现在都能正常运行。

在网上进行了简短的研究,看看是否有人有一个好的解决方案,但没有效果......甚至在微软自己的支持网站上都没有一丝希望。

以下是目前在新W2K8S盒子上采取的步骤:

  • 在服务器管理器
  • 下添加了SMTP功能
  • 在IIS 7管理器中为站点本身启用SMTP电子邮件,以将电子邮件传递到SMTP服务器本地主机,但不成功
  • 为IIS 7管理器中的根站点启用SMTP电子邮件(不确定是否需要启用站点)以将电子邮件传递到SMTP服务器本地主机,但不成功

在失败这些基本设置之后,我想确保我实际上可以从/向服务器端口25进行通信。并且我可以成功地从/向有问题的服务器远程登录到端口25上的测试电子邮件获取HELO等等。所以我不相信它是防火墙配置问题。

使用匿名和Windows身份验证执行IIS 7安装测试 - 无论如何都没有运气。

手动检查Web Config文件,它反映了服务器使用localhost的正确条目。

阅读手册,没有运气......: - /

8 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。

我遇到了这个链接http://www.frontpagewebmaster.com/m-215289/tm.htm

我能够解决这个问题。转到此链接的最后一篇文章。

在我的情况下,我通过将“NETWORK SERVICE”用户的权限授予“Pickup”文件夹来解决问题。

希望这可能会有所帮助......

答案 1 :(得分:1)

好的,对于说“给网络用户提供对拾取文件夹的写权限的帖子”它最终有效。我做的是:

  1. 除非您正在运行Exchange服务器,否则您需要使用“智能主机”。我使用的是Gmail帐户,Gmail允许SMTP转发。

  2. 您可以使用Windows身份验证来确保SMTP服务器和IIS7配置设置的安全性。

  3. 首先,在您的网页中设置交付方式= “network”,并使您的智能主机独立于SMTP服务器进行配置。

    SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.UseDefaultCredentials = false; // use your smart host login client.Credentials = new NetworkCredential("xxxxx@gmail.com", "password");
    client.EnableSsl = true;
    

    这将直接发送电子邮件并绕过您的SMTP服务器。

  4. 第二步,一旦你有了这个工作,编写一个示例Windows应用程序来独立于你的网页使用你的SMTP服务器,并使其正常工作。

    SmtpClient client = new SmtpClient("your server ip", 25);
    client.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
    client.EnableSsl = false; // you can't use ssl with a pickup folder
    client.UseDefaultCredentials = true; // use windows credentials
    

    这将绕过您的网页,并确保正确配置了SMTP服务器。

  5. 最后,通过在您的代答文件夹上设置共享以允许对NETWORK_SERVICE的写入权限,让您的网页正常工作。将登录信息从步骤3传输到SMTP设置,将身份验证设置为集成安全性,并使用步骤4中的代码作为您的网页。

答案 2 :(得分:1)

我遇到了与旧问题中描述的完全相同的问题。最后我找到了解决方案。在我的情况下,操作系统是带有IIS 7.5的W2008 R2,但我认为这无关紧要。

根本问题是W2008 R2中的SMTP服务似乎是IIS的遗留部分。它与IIS 6.0管理工具一起安装,与IIS 7.X Server并排安装。这会导致两个派生的问题:

IIS 7.X对SMTP服务一无所知。如果在ASP.NET中配置SMTP以使用PickupDirectoryFromIis,则会导致异常。 因此您无法使用此SMTP配置

<smtp deliveryMethod="PickupDirectoryFromIis" />

但是可以使用SpecifiedPickupDirectory配置SMTP,您可以使用此配置

<smtp deliveryMethod="SpecifiedPickupDirectory">
    <specifiedPickupDirectory pickupDirectoryLocation="C:\inetpub\mailroot\Pickup"  />
</smtp>

如果以这种方式配置拾取目录,则可能会遇到第二种问题:IIS6和IIS7.X具有不同的安全系统。 IIS 7.X引入了具有应用程序池标识的集成安全性。 IIS 6.0及其SMTP服务不知道这一点。因此,您必须将IIS_IUSRS的写权限授予拾取文件夹。在我的配置中,提取文件夹是C:\ inetpub \ mailroot \ pickup。

答案 3 :(得分:1)

我注意到事件ID 4006引用了域控制器ip而不是邮件服务器ip。 我使用iis 6管理工具配置指向邮件服务器的智能主机,瞧!这个问题已经解决了。

答案 4 :(得分:0)

我不确定此诊断工具是否可以提供更多见解,

http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1308

此工具适用于x86。

答案 5 :(得分:0)

您是否检查过SMTP服务是否接受来自localhost的中继邮件?为此,请从相关计算机telnet到本地SMTP服务器,并使用SMTP命令发送测试邮件。 SMTP服务对命令格式非常挑剔,因此在输入命令时必须小心(即不要使用退格键来纠正打字错误)。

答案 6 :(得分:0)

这是一个偶然的机会,是依靠CDONTS发送邮件的旧“经典”ASP应用程序吗?

如果是这样,也许these links中的一个会有所帮助?

编辑:我在注意到原帖上的说明之前回复了。无视...

答案 7 :(得分:0)

我在研究在我的ASP.Net应用程序上运行SMTP时遇到了这个帖子,我们正在从IIS6迁移到IIS7。我发现我们根本没有设置SMTP服务器 - 只需设置SMTP电子邮件就足够了 - 还有一个好处就是没有SMTP通过Web服务器中继的安全问题!

因此,如果您不需要Web服务器实际执行SMTP路由,则不必在IIS7中设置服务器。