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

C# 如何通过IIS7发送电子邮件?,c#,iis-7,smtp,C#,Iis 7,Smtp,我正在尝试在IIS7中的Windows 7计算机上设置SMTP服务器。我已将其设置为“将电子邮件发送到本地主机,端口25,无身份验证。但当我尝试从我的C#程序以编程方式连接时,我收到一个错误: 发送邮件失败,“内部异常”无法建立连接,因为目标计算机主动拒绝127.0.0.1:25 为什么?我还需要翻转什么秘密开关?您需要在IIS7中设置SMTP服务器,以下是如何设置的说明: 我发现最好的方法是使用,它会侦听电子邮件,并显示“发送”的内容,但实际上不会发送任何内容。非常适合测试!出于开发目的,我使

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

发送邮件失败,“内部异常”无法建立连接,因为目标计算机主动拒绝127.0.0.1:25


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

您需要在IIS7中设置SMTP服务器,以下是如何设置的说明:


我发现最好的方法是使用,它会侦听电子邮件,并显示“发送”的内容,但实际上不会发送任何内容。非常适合测试!

出于开发目的,我使用将邮件存储到文件系统,请在web.config中尝试此方法

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

很抱歉,这些答案中的大多数完全令人困惑,无法解释问题所在。以下是问题所在

在Windows 7 Professional和Windows server 2008等“真实”web服务器上,IIS 7中的“SMTP电子邮件”是指SMTP电子邮件不是真正的“虚拟SMTP服务器”或Microsoft称之为“简单邮件传输协议(SMTP)”“。它只是一个界面,允许您将应用程序联机连接到SMTP服务器。我们以前在旧Windows上使用的虚拟SMTP服务器现在只能作为服务器操作系统上的附加组件使用“管理工具”下的“服务器管理器”并单击“添加功能”。这在Windows7 Professional上找不到。微软又犯了一个错误

但是,您仍然可以使用开发中的IIs下的“SMTP电子邮件”部分,甚至可以使用Web服务器将邮件路由到真正的SMTP服务器。这与过去的情况不同,当时两者都是一个整体,你可以将电子邮件发送到本地邮箱等进行测试。他们让你在本地存储,但这对我帮助不大。这就是为什么在SMTP电子邮件中“localhost”不起作用的原因。大多数人都这么说。为此,您需要安装第三方软件。更好的解决方案是,只需获取Windows Server管理包,其中包含服务器操作系统上的虚拟服务器和所有web服务器产品,然后安装:

请记住,只要您有真正SMTP服务的地址(如“mail.yourwebhost.com”),就不必在本地邮箱或服务器上运行任何真正的SMTP虚拟服务器。在IIS7下,只需单击IIS7下的SMTP电子邮件并键入地址。但是“本地主机”不起作用。使用远程主机使用SMTP电子邮件时,我发现大多数SMTP或电子邮件提供程序需要两个额外的东西:一个不是“25”的端口,以及添加SMTP电子邮件下的自定义身份验证凭据。网络解决方案喜欢使用您的电子邮件地址进行登录,并使用您的地址密码。我连接了所有这些,邮件c#对象在本地邮箱上没有虚拟SMTP服务器的情况下发送邮件。最后一个诀窍是确保将此添加到您的c#代码中:


您需要设置SMTP服务器。似乎您已更改IIS用于发送邮件而不是接收邮件的服务器信息。@svinto-how?(如果这是答案,请回答,而不是评论)@Pauli-hmmm,显然不是:看起来我必须安装第三方SMTP服务器!反常的这到底是为什么?如果Windows 7足够好,可以安装IIS7,那么为什么MS不能同时包含标准SMTP服务器?谢谢,但我有Windows 7-没有“服务器管理器”,对不起,我没有意识到它是Windows 7。Windows 7上不支持SMTP,您可以为此安装一些第三方应用程序,请参阅此链接:感谢指向ServerFault的链接-这值得+1这是一个极好的解决方案。强烈建议开发人员使用此路线。
<mailSettings>
  <smtp deliveryMethod="SpecifiedPickupDirectory">
    <specifiedPickupDirectory pickupDirectoryLocation="c:\temp\mails\" />
  </smtp>
</mailSettings>
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;