我正在尝试使用SmtpClient类从ASP.NET Web应用程序发送电子邮件。到目前为止,我已授予对127.0.0.1的中继访问权限。我正在尝试将测试电子邮件发送到我的Gmail帐户。 EML文件卡在mailroot的队列文件夹中。我的WinXP防火墙已禁用。我在代码中没有任何例外,但电子邮件永远不会传递到目标地址。我还尝试了其他电子邮件帐户。
SmtpClient client = new SmtpClient();
client.Host = "127.0.0.1";
MailMessage message = new MailMessage();
message.To.Add("myemail@gmail.com");
message.From = "name@domain.com";
message.Subject = subject;
message.IsBodyHtml = false;
message.Body = body;
client.Send(message);
以下是IIS SMTP日志的摘录。
Software: Microsoft Internet Information Services 5.1
Version: 1.0
Date: 2009-01-16 18:28:28
Fields: time c-ip cs-method cs-uri-stem sc-status
18:28:28 127.0.0.1 EHLO - 250
18:28:28 127.0.0.1 MAIL - 250
18:28:28 127.0.0.1 RCPT - 250
18:28:28 127.0.0.1 DATA - 250
18:29:45 127.0.0.1 MAIL - 250
18:29:45 127.0.0.1 RCPT - 250
18:29:45 127.0.0.1 DATA - 250
18:30:37 127.0.0.1 QUIT - 0
答案 0 :(得分:1)
根据网络的设置方式,您可能需要告知IIS将电子邮件传递到Exchange服务器以传递到外部世界。要做到这一点:
1.右键单击IIS MMC管理单元中的“默认SMTP虚拟服务器”节点,然后打开“属性”对话框
2.转到“传递”选项卡,然后单击选项卡底部的“高级”按钮
3.在“智能主机”框中,输入Exchange服务器的名称。 (或者相同的DNS条目,例如smtp.mydomain.com)
答案 1 :(得分:1)
我刚刚遇到同样的问题,我想我知道为什么 - 以及解决方案。
问题以及如何测试
首先,我检查了我可以通过端口25进行连接。例如,通过在命令提示符中打开telnet并输入来轻松完成(小圆圈是自己的字母O,而不是符号:));
o auth.smtp.1and1.co.uk 25
如果连接(而不是给你一个错误)那么它不端口25的防火墙问题。如果它确实给你一个错误,那么首先检查你的防火墙设置,直到它工作。
接下来,我启用了SMTP服务的登录,并勾选了所有扩展属性。然后,这在日志文件中给了我两个URL。在我的情况下,他们是
http://www.spamhaus.org/query/bl?ip=217.44.248.144
http://www.sorbs.net/lookup.shtml?217.44.248.144
在这些链接之后,它基本上变得很清楚,那里的人(我猜接收服务器)正在检查并看到我从动态IP地址发送(我只是通过ADSL在家中这样做)并因此阻止它垃圾邮件。
解决方案
您需要将SMTP服务器配置为通过ISP的SMTP服务器进行中继
1.转到SMTP服务的属性,然后转到交付 - >高级
2.将ISP的SMTP服务器名称放在“智能主机”字段中(例如auth.smtp.1and1.co.uk)
3.保存
4.返回“传递”选项卡,单击“出站安全性”选项卡
5.单击“基本身份验证”并指定用于访问电子邮件的用户名和密码。
请注意;我假设您必须对您的ISP SMTP服务器进行身份验证,并且他们使用相同的uid / pwd用于POP3 / IMAP和SMTP,因为这是最常见的。您的情况可能会有所不同 - 请在电子邮件程序中查看您的电子邮件设置。
答案 2 :(得分:0)
我还在测试这个Jim,我注意到的一件事是你没有正确设置你的地址。 From接受MailAddress类而不是字符串。
变化:
message.From = "name@domain.com";
要:
message.From = new MailAddress("name@domain.com");
在默认SMTP设置下:
“IP地址:”下拉列表是设置为127.0.0.1还是(全部未分配)?如果可能,将其设置为“全部未分配”。 尝试添加绑定到您的计算机的IP地址,以便能够通过SMTP服务进行中继。虽然您向主机127.0.0.1发送电子邮件,但它可能是从您指定的本地网络发送的。要确保内容正常工作,您可能需要在“中继限制”中选择“除下面列表以外的所有内容”中的单选按钮并清除列表。这将打开继电器以测试您的配置。一旦弄清楚问题所在,就应该限制这一点。
SMTP日志中是否列出了任何错误代码?
答案 3 :(得分:0)
如果代码没有返回任何异常,则它不可能是那里的任何东西。 如果您查看原始.EML文件,请检查并查找不合适的内容。
然而,最可能的问题是给IIS一个“iisreset”。这样做,你可能会看到消息开始发送。在重新启动之前,SMTP服务器上的配置更改并不总是起作用。
答案 4 :(得分:0)
检查您的活动查看器,然后您会看到类似这样的内容
向远程域“yahoo.com”发送邮件失败的原因如下:发生SMTP协议错误。
有关详细信息,请参阅http://go.microsoft.com/fwlink/events.asp上的“帮助和支持中心”。
(这是我的)。我认为雅虎必须有某种协议吗?或者我们设置了错误的协议?仍在计算..给我发电子邮件,请发送电子邮件至jokenjp@yahoo.com(有一个很好的主题,所以我不认为是垃圾邮件)