我无法使用以下代码向“user.one@asdf.com”等外部域地址发送电子邮件。
SmtpClient smtpClient = new SmtpClient(smtpMailServer);
smtpClient.UseDefaultCredentials = true;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.EnableSsl = true;
//Sending mail.
smtpClient.Send(mailMessage);
我得到一个例外 -
Mailbox unavailable. The server response was: 5.7.1 Unable to relay for xxx@example.com
如果我将DeliveryMethod更改为 -
smtpClient.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
我可以在本地计算机上发送电子邮件。但它在生产网站上失败,但有例外 -
Cannot get IIS pickup directory
你能告诉我该怎么做吗?
答案 0 :(得分:4)
我有这个问题并通过身份验证修复了它,请参阅下文:
SmtpClient client = new SmtpClient(EmailServer, 25);
var SmtpUser = new System.Net.NetworkCredential("domain\\username", "password");
client.Credentials = SmtpUser;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
我不得不使用双斜杠,因为一个斜杠是转义字符,所以使用两个斜杠来工作。
答案 1 :(得分:2)
如果您要查找目标地址的MX记录(在您的示例中,它是asdf.com),然后将其用于SmtpClient的主机属性,应该接受该消息没有身份验证的交付,因为它是本地用户。这并不容易,因为System.Net不提供可以返回MX记录的托管DNS类,但您可以P /调用非托管代码来执行此操作。否则,您需要确保所连接的任何SMTP服务器都将为您进行中继,然后将SmtpClient的Credentials属性设置为用于连接到该服务器的相应凭据。将DeliveryMethod设置为PickupDirectoryFromIIS仍然只将文件写入IIS拾取目录,因此它只写一个文件,它没有进行实际的发送。
答案 2 :(得分:1)
您通常需要使用用户名/密码对外部邮件服务器进行身份验证。当您使用外部服务器时,这将不知道您传递的凭据。这可能是你的问题。
答案 3 :(得分:0)
我遇到了这个问题,我通过添加" *。com"作为域名,并在IIS 6.0管理器/ SMTP虚拟服务器/域下键入" remote&#34 ;.
虽然在我的情况下SMTP服务器允许匿名访问。