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

时间:2012-02-07 18:16:30

标签: c# .net iis exchange-server

所以我收到的这个错误有很多帖子。但大多数处理IIS。

  

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

我已将我的代码移植到控制台以查看是否仍然出现此错误,而且我确实如此。虽然这是一个控制台应用程序,但它似乎仍然使用ISS作为中继或其他东西?

我已与Exchange管理员交谈,他不会打开邮件服务器进行任何中继或允许我的服务器这样做。所以我想让我的C#代码发送电子邮件作为常规认证客户端,就像它是outlook。

如果我将代码发送给我自己域内的某个人,则我的代码可以正常运行,但如果收件人不在域名内,则无法使用。

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

CODE:

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设置。

1 个答案:

答案 0 :(得分:0)

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

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

另外,请务必将UseDefaultCredentials设置为false

_SMTPServer.UseDefaultCredentials = false;