System.Net.Mail.SmtpException:'邮箱不可用。服务器响应为:未执行请求的邮件操作:邮箱不可用'

时间:2018-09-26 22:53:07

标签: system.net.mail yahoo-mail

由于Yahoo更改了用户身份验证,因此我收到此消息。 如果我使用Yahoo建议的选项,我的代码仍然有效:

  

切换应用程序或更新应用程序时,您可以将旧应用程序提供给   临时访问。请记住,这不是永久性的   访问,然后您将其关闭。打开允许应用   使用安全性较低的登录帐户。启用该功能后,您将   会定期收到提醒您将其关闭的警报...

我的问题是如何在不打开

的情况下更新代码以使其正常工作
  

允许使用安全性较低的应用登录。

在Yahoo方面?

代码:

private void Test_Click(object sender, EventArgs e)
{
    MailMessage mail = new MailMessage("userid@yahoo.com", "user@example.com", "Test", "Hello World");

    SmtpClient smtp = new SmtpClient();
    smtp.UseDefaultCredentials = false;
    smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
    smtp.EnableSsl = true;
    smtp.Host = "smtp.mail.yahoo.com"; 
    smtp.Port = 587;//I tried 465 as well
    smtp.Credentials = new NetworkCredential( "userid@yahoo.com", "myPassword");

    smtp.Send(mail);
}

1 个答案:

答案 0 :(得分:0)

为避免使用该选项,您将需要使用OAuth2进行身份验证,而不要使用用户ID和密码。

您需要register your application with Yahoo。然后完成OAuth2工作流程:

  • 从Yahoo获取请求令牌
  • 启动Web浏览器并将用户发送到Yahoo以授权您的应用程序并获取授权密钥
  • 将授权密钥换成访问令牌
  • 将访问令牌存储在某个地方,并在通过SMTP登录时使用它

您将为此需要第三方库。我认为SmtpClient不支持OAuth,您需要一个库来为您处理其他OAuth详细信息。

Here是如何使用MailBee.Net(商业电子邮件库)进行OAuth验证的示例。