继电器访问被拒绝 5.7.1

8

我遇到了"Relay access denied"的错误,但是我可以通过一些邮件程序连接我的账户。

我的代码:

        SmtpClient smtpClient = new SmtpClient();
        NetworkCredential basicCredential =
            new NetworkCredential("xx@xx.com", "xxx");
        MailMessage message = new MailMessage();
        MailAddress fromAddress = new MailAddress("xx@xx.com");

        smtpClient.Host = "mail.xx.com";
        smtpClient.Port = 587;
        smtpClient.UseDefaultCredentials = false;
        smtpClient.Credentials = basicCredential;

        message.From = fromAddress;
        message.Subject = subject;
        message.IsBodyHtml = true;
        message.Body = body;
        message.To.Add("aa@aa.com");

        try    
        {
            smtpClient.Send(message);
        }
        catch (Exception ex)
        {
            //Relay access denied...
        }

有人知道这个的原因吗?

5个回答

4

因为您的SMTP主机端口是587,所以在调用其发送方法之前,我认为您应该将smtpClient.EnableSsl设置为true。


3
尽管这个问题现在已经有将近一年了,但我今天刚刚偶然发现了一个类似问题的解决方案。显然,System.Net.Mail.SmtpClient不支持 AUTH PLAIN 方法。不幸的是,我尝试使用的 SMTP 服务器只提供了 AUTH PLAIN。由于 SmtpClient 类和我的服务器无法就身份验证方法达成一致,SmtpClient 尝试发送未经身份验证的邮件,结果被 SMTP 服务器拒绝...
您应该确保您正在使用的 SMTP 服务器至少提供了一个 SmtpClient 支持的身份验证机制。我找不到受支持机制的详尽列表,但我的服务器现在提供了与 SmtpClient 兼容的 AUTH LOGIN

1
请尝试。
        SmtpClient client = new SmtpClient("mail.xx@xx.com");

        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        client.UseDefaultCredentials = false;
        client.Credentials = new System.Net.NetworkCredential("xx@xx.com", "xxx");
        client.Port = 587;
        client.EnableSsl = true;

        MailMessage maili = new MailMessage();
        maili.Body = body;
        maili.Subject = subject;
        maili.IsBodyHtml = true;
        maili.From = new MailAddress("xx@xx.com");
        maili.To.Add("aa@aa.com");

        try
        {
            ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
            client.Send(maili);
        }
        catch (Exception ex)
        {
            throw ex;
        }

        maili.Dispose();

2
除了重置堆栈跟踪之外,你的try-catch还有什么作用? - Sam

1
在我的情况下,SMTP密码已更改,导致出现此错误...

0
通常情况下很简单:发送邮件的 "From" 电子邮件地址必须与发送邮件的帐户的域名相同。因此,如果您通过 Hotmail 帐户发送电子邮件,其电子邮件地址为例如 "john.doe@hotmail.com",则 "From" 地址必须设置为相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接