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

本文关键字:经过 身份验证 客户端 代码 我的 何禁用 | 更新日期: 2023-09-27 18:22:50

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

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

我已经将我的代码移植到控制台,看看我是否仍然会收到这个错误,我确实收到了。即使这是一个控制台应用程序,它似乎仍然在使用ISS作为中继或其他什么?

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

如果我将下面的代码发送给我自己域内的某个人,但如果收件人在域外,则不会。

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

代码:

static void Main(string[] args)
{
    Console.WriteLine("Sending Mail...");
    try
    {
        SmtpClient _SMTPServer = new SmtpClient("companymailserver", 587);
        _SMTPServer.Credentials = new System.Net.NetworkCredential("myusername", "mypassword");
        MailMessage _mailMessage = new MailMessage();
        _mailMessage.To.Add(new MailAddress("someone@gmail.com"));
        _mailMessage.From = new MailAddress("myself@mycompanydomain.com");
        _mailMessage.IsBodyHtml = false;
        _mailMessage.Subject = "This is a test";
        _mailMessage.Body = "This is the body";
        _SMTPServer.Send(_mailMessage);
    }
    catch (Exception err)
    {
        Console.WriteLine("error: " + err.Message);
    }
    Console.WriteLine("Press any key to continue...");
    Console.Read();
} 

更新#1

奇怪的是,无论我放什么凭据,我都会得到相同的"无法中继"错误。就好像它默认为中继并忽略我的SmtpClient设置一样。

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

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

_SMTPServer.Credentials = 
    new System.Net.NetworkCredential("myusername", "mypassword", "mydomain");

此外,请确保将UseDefaultCredentials设置为false

_SMTPServer.UseDefaultCredentials = false;