代码之家  ›  专栏  ›  技术社区  ›  krobelusmeetsyndra AnalystCave.com

使用Yahoo发送电子邮件时出现SMTP异常

  •  1
  • krobelusmeetsyndra AnalystCave.com  · 技术社区  · 6 年前

    我使用以下代码从我的应用程序发送电子邮件:

    var config = DeserializeUserConfig(perfilAcesso.GetClientConfigPath() + "Encrypted");
    
    using (SmtpClient client = new SmtpClient())
    {
        client.Host = config.GetClientSMTP();
        client.EnableSsl = true;
        client.UseDefaultCredentials = false;
        client.Credentials = new System.Net.NetworkCredential(config.GetClientEmail(), config.GetClientPassword());
    
        using (MailMessage mail = new MailMessage())
        {
            mail.Sender = new MailAddress(config.GetClientEmail(), config.GetClientName());
            mail.From = new MailAddress(config.GetClientEmail(), config.GetClientCompany());
            mail.To.Add(new MailAddress("emailToReceive"));
            mail.Subject = "[PME] SOS - Equipamento Parado";
            mail.Body = "";
    
            client.Send(mail);
            MessageBox.Show("Email enviado com sucesso!");
       }
    }
    

    我已经设置了三个可能的SMTP主机供用户选择:Gmail( "smtp.gmail.com" )、展望( "smtp.live.com" )雅虎呢( "smtp.mail.yahoo.com" ).

    当我尝试使用Yahoo帐户发送和发送电子邮件时,会引发以下异常:

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

    我知道,当用Gmail和Outlook帐户发送电子邮件时,这种方法非常有效,因为我试过好几次。

    我做错了什么?任何帮助都将不胜感激!

    2 回复  |  直到 6 年前
        1
  •  4
  •   Mohamed Elrashid    6 年前

    第一步

    client.Port = 587;
    

    https://login.yahoo.com/account/security

    步骤3

    允许使用不太安全的应用登录

    enter image description here

    using System;
    using System.Net.Mail;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                using (SmtpClient client = new SmtpClient())
                {
                    client.Host = config.GetClientSMTP();
                    client.EnableSsl = true;
                    client.Port = 587;
                    client.UseDefaultCredentials = false;
                    client.Credentials = new System.Net.NetworkCredential(config.GetClientEmail(), config.GetClientPassword());
    
                    using (MailMessage mail = new MailMessage())
                    {
                        mail.Sender = new MailAddress(config.GetClientEmail(), config.GetClientName());
                        mail.From = new MailAddress(config.GetClientEmail(), config.GetClientCompany());
                        mail.To.Add(new MailAddress(config.emailToReceive));
                        mail.Subject = "Test 2";
                        mail.Body = "Test 2";
                        var isSend = false;
                        try
                        {
                            client.Send(mail);
                            isSend = true;
                        }
                        catch (Exception ex)
                        {
                            isSend = false;
                            Console.WriteLine(ex.Message);
                        }
    
                        Console.WriteLine(isSend ? "All Greeen" : "Bad Day");
                        Console.ReadLine();
                    }
                }
    
            }
        }
    }
    

    如果您添加相同的电子邮件

     mail.To.Add(new MailAddress(config.emailToReceive));
    mail.To.Add(new MailAddress(config.emailToReceive));
    

    你会发现一个错误

    命令顺序错误。服务器响应为:已指定5.5.0收件人

      mail.To.Clear();
    
        2
  •  0
  •   user3188639 user3188639    6 年前

    您确定您的发件人/收件人地址正确吗? 发件人和发件人必须是您的雅虎地址。

    public static void Main(string[] args)
    {
    using (SmtpClient client = new SmtpClient())
    {
        client.Host = "smtp.mail.yahoo.com";
        client.EnableSsl = true;
        client.UseDefaultCredentials = false;
        client.Credentials = new System.Net.NetworkCredential("my-yahoo-login", "yahoo-password");
    
        using (MailMessage mail = new MailMessage())
        {
            // This works 
            mail.Sender = new MailAddress("my-email-address@yahoo.co.uk", "Tom Test");
            mail.From = new MailAddress("my-email-address@yahoo.co.uk", "Tom Test");
            mail.To.Add(new MailAddress("my-email-address@outlook.com"));
    /* This does not
                    mail.Sender = new MailAddress("my-email-address@outlook.com", "Tom Test");
                    mail.From = new MailAddress("my-email-address@outlook.com", "Tom Test");
                    mail.To.Add(new MailAddress("my-email-address@yahoo.co.uk"));
    */
                mail.Subject = "Test mail";
            mail.Body = "Test mail";
    
            client.Send(mail);
            Console.WriteLine("Mail sent");
        }
    }
    }
    

    如果您将非Yahoo地址放在发件人和发件人字段(注释代码)中,您将得到相同的异常。