9

我无法使用下面的代码向外部域地址发送电子邮件,例如“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

4 回答 4

6

我遇到了这个问题并通过身份验证修复了它,如下所示:

SmtpClient client = new SmtpClient(EmailServer, 25);
var SmtpUser = new System.Net.NetworkCredential("domain\\username", "password");
client.Credentials = SmtpUser;
client.DeliveryMethod = SmtpDeliveryMethod.Network;

我不得不使用双斜杠,因为一个斜杠是转义字符,所以使用两个斜杠来工作。

于 2011-04-20T09:27:43.563 回答
2

如果您要查找目标地址的 MX 记录(在您的示例中,它是 asdf.com),然后将其用于 SmtpClient 的主机属性,它应该接受无需身份验证的传递消息,因为它是本地用户. 这并不容易做到,因为 System.Net 不提供可以返回 MX 记录的托管 DNS 类,但您可以 P/调用非托管代码来执行此操作。否则,您需要确保您连接的任何 SMTP 服务器都将为您中继,然后将 SmtpClient 的 Credentials 属性设置为连接到该服务器的适当凭据。将 DeliveryMethod 设置为 PickupDirectoryFromIIS 仍然只会将文件写入 IIS 拾取目录,因此它只是写入文件,而不是实际发送。

于 2009-10-10T02:22:10.143 回答
1

您通常需要使用用户名/密码向外部邮件服务器进行身份验证。当您使用外部服务器时,这将不知道您传递的凭据。这可能是你的问题。

于 2009-09-29T11:37:24.923 回答
0

我遇到了这个问题,我通过在 IIS 6.0 Manager/SMTP Virtual Server/Domains 下添加一个域,将“*.com”作为域名并键入“remote”来解决这个问题。

尽管在我的情况下 SMTP 服务器允许匿名访问。

于 2014-08-05T09:20:36.797 回答