如何通过IIS7发送电子邮件?

15

我正在尝试在我的Windows 7机器上在IIS7中设置SMTP服务器。 我已将其设置为“将电子邮件传递到本地主机,端口25,无验证”。 但是当我尝试从我的C#程序以编程方式连接时,我会收到以下错误:

发送邮件失败”,内部异常“由于目标计算机积极拒绝,无法建立连接127.0.0.1:25

public static void SendEmail(MailMessage m) {
  var smtp = new SmtpClient {
    Host = "localhost",
    Port = 25,
    UseDefaultCredentials = true,
  };
  smtp.Send(m);
}

为什么?我还需要翻转哪个秘密开关吗?


您需要设置一个SMTP服务器。看起来您已经更改了IIS用于发送邮件的服务器信息,而不是接收它们的信息。 - Svante Svenson
@svinto - 怎么做?(如果这是答案,请将其作为答案,而不是评论) - Shaul Behr
你在这个IP和端口上运行一个SMTP服务器吗? - Pauli Østerø
1
@Pauli - 嗯,显然不行:https://dev59.com/-nNA5IYBdhLWcg3wBpDs#1120170 看起来我必须安装第三方SMTP服务器!太过分了! - Shaul Behr
1
为什么那是如此令人震惊的? - Pauli Østerø
1
如果Windows 7足够好以安装IIS7,那么为什么微软不能同时包含标准的SMTP服务器呢? - Shaul Behr
4个回答

12

为了开发目的,我使用文件系统存储邮件,请在web.config中尝试以下操作。

<mailSettings>
  <smtp deliveryMethod="SpecifiedPickupDirectory">
    <specifiedPickupDirectory pickupDirectoryLocation="c:\temp\mails\" />
  </smtp>
</mailSettings>

这是一个非常优秀的解决方案。强烈推荐开发者采用这种方式。 - PFranchise

11

抱歉,但大部分答案都非常混乱,无法解释问题。这里是问题所在:

IIS 7中的“SMTP电子邮件”(在Windows 7 Professional和像Windows Server 2008这样的“真正”Web服务器上)的问题在于,SMTP电子邮件不是真正的“虚拟SMTP服务器”或Microsoft所说的“简单邮件传输协议(SMTP)”。它只是一个接口,允许您将应用程序发送到在线SMTP服务器。我们以前在旧版Windows上使用的虚拟SMTP服务器现在仅作为添加功能可用于服务器操作系统,您可以通过管理工具下的“服务器管理器”并单击“添加功能”来使用。这在Windows 7专业版上找不到。又是微软的一个失误!

然而,在开发或甚至您的Web服务器中,您仍然可以使用IIs下的“SMTP电子邮件”部分将邮件路由到真正的SMTP服务器。与早期版本不同的是,两者不再是相同的东西,您不能将电子邮件路由回本地计算机等进行测试。他们允许您将其存储在本地,但对我来说没什么帮助。这就是为什么在SMTP电子邮件中“localhost”无法使用。这是大多数人说的。对此,您需要安装第三方软件。更好的解决方案是只需获取Windows Server Admin包,该包括虚拟服务器和在服务器操作系统上找到的所有Web服务器好处,并安装: http://www.sysprobs.com/install-admin-pack-windows-7-remote-desktop-manager

请注意,只要您有真正SMTP服务的地址(例如“mail.yourwebhost.com”),则不必在本地计算机或服务器上运行任何真正的SMTP虚拟服务器。在IIS7下,只需单击IIS7下的SMTP电子邮件部分并键入地址即可。但是,“localhost”不起作用。使用远程主机的SMTP电子邮件时,我发现大多数SMTP或电子邮件提供商需要两个附加项:除“25”端口之外的端口和您在SMTP电子邮件下添加的自定义身份验证凭据。Network Solutions喜欢使用您的电子邮件地址作为登录名和您的地址密码。我连接了所有这些内容,并且mail c#对象发送了没有在我的本地计算机上使用虚拟SMTP服务器的邮件。最后一个技巧是确保将此也添加到您的c#代码中:

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(
        "mail.yourhost.com",155);//add custom port here
//This object stores the authentication values
System.Net.NetworkCredential mycredentials = new System.Net.NetworkCredential(
        "yourname@yourdomain.com", "passwordhere");
client.UseDefaultCredentials = false;
client.Credentials = mycredentials;

5

我发现最好的方法是使用SMTP4Dev,它可以监听电子邮件并显示“发送”的内容,但实际上不会真正发送任何东西。非常适合进行测试!


3

谢谢,但我使用的是 Windows 7 - 没有 "服务器管理器"。 - Shaul Behr
2
抱歉,我没意识到这是 Windows 7。在 Windows 7 上没有SMTP支持,您可以安装一些第三方应用程序来解决,参见此链接: http://serverfault.com/questions/64753/smtp-server-on-windows-7 - ShahidAzim
感谢提供 ServerFault 的链接 - 这值得 +1。 - Shaul Behr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接