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

问题描述 投票:8回答:4

我无法使用以下代码将电子邮件发送到外部域地址,例如'[email protected]'。

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 [email protected]

如果我将DeliveryMethod更改为-

smtpClient.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;

我能够在本地计算机上发送电子邮件。但是它在生产站点上失败,但有一个例外-

Cannot get IIS pickup directory

您能建议我做什么吗?

asp.net email smtpclient
4个回答
5
投票

我遇到了这个问题,并进行了身份验证,如下所示:

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

我必须使用双斜杠,因为一个斜杠是转义字符,因此请使用两个斜杠才能起作用。


2
投票

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


1
投票

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


0
投票

我遇到了这个问题,我通过在IIS 6.0 Manager / SMTP虚拟服务器/域下添加一个域名为“ * .com”且类型为“ remote”的域来解决。

尽管就我而言,SMTP服务器允许匿名访问。

© www.soinside.com 2019 - 2024. All rights reserved.