C# 如何禁用中继并将代码用作经过身份验证的客户端?

C# 如何禁用中继并将代码用作经过身份验证的客户端?,c#,.net,iis,exchange-server,C#,.net,Iis,Exchange Server,所以我收到了很多关于这个错误的帖子。但大多数都与IIS打交道 邮箱不可用。服务器响应为:5.7.1无法中继 我已经将代码移植到控制台,以查看是否仍然存在此错误,我确实如此。它似乎仍然使用ISS作为中继或其他东西,即使这是一个控制台应用程序 我已经和Exchange管理员谈过,他不会打开邮件服务器进行任何中继,也不会允许我的服务器这样做。所以我想让我的C代码作为一个普通的经过身份验证的客户端发送电子邮件,就像它是outlook一样 如果我将下面的代码发送给我自己域内的某人,但如果收件人不在域内,则

所以我收到了很多关于这个错误的帖子。但大多数都与IIS打交道

邮箱不可用。服务器响应为:5.7.1无法中继

我已经将代码移植到控制台,以查看是否仍然存在此错误,我确实如此。它似乎仍然使用ISS作为中继或其他东西,即使这是一个控制台应用程序

我已经和Exchange管理员谈过,他不会打开邮件服务器进行任何中继,也不会允许我的服务器这样做。所以我想让我的C代码作为一个普通的经过身份验证的客户端发送电子邮件,就像它是outlook一样

如果我将下面的代码发送给我自己域内的某人,但如果收件人不在域内,则我的代码不起作用

如何禁用中继并将代码用作经过身份验证的客户端,以便向域外的人发送电子邮件

代码:

更新1


奇怪的是,无论我放了什么凭证,我都会得到相同的“无法中继”错误。好像它默认中继并忽略我的SmtpClient设置。

我猜身份验证失败了。尝试包含域名

_SMTPServer.Credentials = 
    new System.Net.NetworkCredential("myusername", "mypassword", "mydomain");
另外,请确保将UseDefaultCredentials设置为false

_SMTPServer.UseDefaultCredentials = false;

这是一个出站邮件服务器设置,我认为在代码方面您无法做到这一点。@kd7为什么我不能作为常规SmtpClient发送邮件而不进行中继?在所有这些操作之后,该类被称为SmtpClient。服务器允许任何经过身份验证的客户端向任何人发送电子邮件。无论如何,这应该是可能的。大多数邮件服务器将允许中继,只要电子邮件来自系统上有邮箱的用户,并且该用户经过身份验证。否则,用户将永远无法向其他公司发送电子邮件;它是一个SMTP服务器接受客户机的邮件并将其传递到另一个服务器,而不是接受它进行本地传递。您的问题似乎也与IIS无关。某些版本的IIS附带SMTP服务,这就是为什么本主题中的许多问题都提到IIS,但在您的案例中,您指定的是特定的服务器。Tim Larson的答案似乎是您需要在此处使用的方向。您可以尝试在命令行上使用SMTP手动发送邮件。这可能有助于排除故障。请再试一次-我添加了一条关于UseDefaultCredentials的注释,在拍摄前我忘记了,UseDefaultCredentials听起来很有希望。但还是一样的错误和一切。
_SMTPServer.UseDefaultCredentials = false;