无法使用SMTP向外部域发送电子邮件

时间:2009-09-29 11:13:48

标签: asp.net email smtpclient

我无法使用以下代码向“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

你能告诉我该怎么做吗?

4 个答案:

答案 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服务器允许匿名访问。