我收到错误“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...
}
有谁知道这个的原因?
答案 0 :(得分:4)
由于你的smtp主机端口是587,我认为你应该在调用它的Send方法之前将smtpClient.EnableSsl设置为true。
答案 1 :(得分:3)
虽然这个问题现在差不多已经有一年了,但我今天偶然发现了类似问题的解决方案。显然,System.Net.Mail.SmtpClient
班does not support the AUTH PLAIN
method。不幸的是,我尝试使用的SMTP服务器仅提供AUTH PLAIN
。由于SmtpClient
类和我的服务器无法就身份验证方法达成一致,SmtpClient
尝试发送未经身份验证的邮件,而这些邮件已被SMTP服务器拒绝...
您应该确保您使用的SMTP服务器至少提供SmtpClient
支持的一种身份验证机制。我找不到支持机制的详尽列表,但我的服务器现在提供的AUTH LOGIN
与SmtpClient
一起使用。
答案 2 :(得分: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();
答案 3 :(得分:1)
在我的情况下,smtp密码已更改,并且给了我这个错误...
答案 4 :(得分:0)
通常很简单:“发件人”电子邮件地址的域名必须与发送电子邮件的帐户的域名相同。因此,如果您通过带有电子邮件地址的Hotmail帐户发送电子邮件,例如“ john.doe@hotmail.com”,“发件人”地址必须设置为相同。