我正在尝试在IIS7中的Windows 7计算机上设置SMTP服务器。我已将其设置为“将电子邮件发送到localhost,端口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);
}
为什么呢?还有什么秘密开关可以翻转?
答案 0 :(得分:12)
出于开发目的,我使用存储邮件到文件系统,在web.config
中尝试<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="c:\temp\mails\" />
</smtp>
</mailSettings>
答案 1 :(得分:11)
很抱歉,但大部分答案都令人困惑,并没有解释问题。这就是问题所在。
IIS 7中的“SMTP电子邮件”,Windows 7专业版和“真实”Web服务器(如Windows Server 2008)上的SMTP电子邮件不是真正的“虚拟SMTP服务器”或Microsoft称之为“简单”邮件传输协议(SMTP)“。它只是一个界面,允许您连接到SMTP服务器的应用程序。我们以前在旧Windows上使用的虚拟SMTP服务器现在只能作为服务器操作系统上的附件使用“管理工具”下的“服务器管理器”并单击“添加功能”。据说Windows 7 Professional没有找到。还有一个微软的错误!
但是,您仍然可以使用开发中的IIs下的“SMTP电子邮件”片段甚至是Web服务器将邮件路由到真正的SMTP服务器。它不像过去两者都是同一个,你可以将电子邮件发送回本地盒子等进行测试。他们让你在当地储存,但这对我没什么帮助。这就是为什么在SMTP电子邮件中“localhost”不起作用的原因。这就是大多数人所说的。为此,您需要安装第三方软件。更好的解决方案是获取Windows Server Admin Pack,其中包含虚拟服务器和服务器操作系统上的所有Web服务器商品,并安装:http://www.sysprobs.com/install-admin-pack-windows-7-remote-desktop-manager
请记住,只要您拥有真实SMTP服务的地址(例如“mail.yourwebhost.com”),就不必在本地机器或服务器上运行任何真正的SMTP虚拟服务器。 。在IIS7下,只需单击IIS7下的SMTP电子邮件,然后键入地址。但是“localhost”不会有任何问题。使用远程主机的Usng SMTP电子邮件,我发现大多数SMTP或电子邮件提供商都需要两个额外的东西:“25”以外的端口,并添加在SMTP电子邮件下找到的自定义身份验证凭据。 Network Solutions喜欢使用您的电子邮件地址登录和您的地址密码。我搞砸了所有这一切,邮件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;
答案 2 :(得分:5)
我发现的最佳方法是使用SMTP4Dev来监听电子邮件,并向您显示“已发送”的内容,但实际上并未发送任何内容。非常适合测试!
答案 3 :(得分:3)
您需要在IIS7中设置SMTP服务器,以下是如何设置的说明:
http://learn.iis.net/page.aspx/751/configure-smtp-e-mail-in-iis-7/