2013-04-23 47 views
0

这里是我的下面的完整代码,请帮助,我一直试图通过Gmail发送电子邮件,我得到这个错误“530-5.5.1认证要求”,异常发生在这里的这条线上的“Send()”方法中:(参见下面的完整代码),由于某种原因,我没有使用C#库,所以我需要得到它的工作,谢谢。530-5.5.1认证所需的错误,smtp

//EXCEPTION OCCURS HERE, SEE THE SEND METHOD BELOW FOR FULL CODE 
    foreach (string address in to) 
     { 
      try 
      { 
       message = "RCPT TO:<" + address + ">\r\n"; 
       response = ReadLine(); 
       SendCommand(message); 
       Console.WriteLine(response); 
       if (response.Substring(0, 3) != "250") 
       { 
        throw new SmtpException(response); 
       } 
      } 

     } 
    //CONSTRUCTOR 
    public Smtp() 
    { 
     Port =465 ; 
     Host = "smtp.gmail.com"; 
     Email = "[email protected]"; 
     Password = "xxxxxxx"; 
     to = new List<String>() { "[email protected]"}; 
     from = "[email protected]"; 

    } 

    //FULLE CODE 
    public void Connect() 
    { 
     if (Client == null) 
      Client = new TcpClient(); 

     if (!Client.Connected) 
      Client.Connect(Host, Port); 

     //if (IsSecure) 
     //{ 
      SslStream secureStream = 
       new SslStream(Client.GetStream()); 
      secureStream.AuthenticateAsClient(Host); 

      ClientStream = secureStream; 
      secureStream = null; 
      Console.WriteLine("secure"); 

     //} 
     //else 
     //{ 
     // ClientStream = Client.GetStream(); 
     // Console.WriteLine("non secure"); 
     //} 

     Writer = new StreamWriter(ClientStream); 
     Reader = new StreamReader(ClientStream); 

     string c= ReadLine(); 
     Console.WriteLine(c); 

     string message = "EHLO me"; 
     SendCommand(message); 
     string response = ReadLine(); 
     Console.WriteLine(response); 
     if (response.Substring(0, 3) != "250") 
     { 
     // throw new SmtpException(response); 
     } 

     Send(); 
    } 


    // public void 
    public void Send() 
    { 
     string message = "MAIL FROM:<" + Email + ">"; 
     SendCommand(message); 
     string response = ReadLine(); 
     Console.WriteLine(response); 
     if (response.Substring(0, 3) != "250") 
     { 
      throw new SmtpException(response); 
     } 
     string x = ReadLine(); 
     Console.WriteLine(x); 

     **//EXCEPTION OCCURS HERE** 
     foreach (string address in to) 
     { 
      try 
      { 
       message = "RCPT TO:<" + address + ">\r\n"; 
       response = ReadLine(); 
       SendCommand(message); 
       Console.WriteLine(response); 
       if (response.Substring(0, 3) != "250") 
       { 
        throw new SmtpException(response); 
       } 
      } 
      catch (SmtpException e) 
      { 
       System.Console.WriteLine("{ 0}", e.Message); 
      } 
     } 

     message = "DATA\r\n"; 
     SendCommand(message); 
     response = ReadLine(); 
     Console.WriteLine(response); 
     if (response.Substring(0, 3) != "354") 
     { 
      throw new SmtpException(response); 
     } 

     message = "Subject: " + subject + "\r\n"; 
     foreach (string address in to) 
     { 
      message += "To: " + address + "\r\n"; 
     } 
     foreach (string address in cc) 
     { 
      message += "Cc: " + address + "\r\n"; 
     } 

     message += "From: " + from + "\r\n"; 
     if (bodyHtml.Length > 0) 
     { 
      message += "MIME-Version: 1.0\r\n" 
       + " Content-Type: text/ html;\r\n" 
       + " charset=\" iso-8859-1\"\r\n"; 
      message += "\r\n" + bodyHtml; 
     } 
     else 
     { 
      message += "\r\n" + bodyText; 
     }; 
     message += "\r\n.\r\n"; 
     SendCommand(message); 
     response = ReadLine(); 
     Console.WriteLine(response); 
     if (response.Substring(0, 3) != "250") 
     { 
      throw new SmtpException(response); 
     } 

     message = "QUIT\r\n"; 
     SendCommand(message); 
     response = ReadLine(); 
     Console.WriteLine(response); 
     if (response.IndexOf(" 221") == -1) 
     { 
      throw new SmtpException(response); 
     } 

    } 

    public void Close() 
    { 
     if (Client != null) 
     { 
      if (Client.Connected) 
       Logout(); 

      Client.Close(); 
      Client = null; 
     } 

     if (ClientStream != null) 
     { 
      ClientStream.Close(); 
      ClientStream = null; 
     } 

     if (Writer != null) 
     { 
      Writer.Close(); 
      Writer = null; 
     } 

     if (Reader != null) 
     { 
      Reader.Close(); 
      Reader = null; 
     } 

     disposed = true; 
    } 

    public void Dispose() 
    { 
     if (!disposed) 
      Close(); 
    } 

    protected void Login() 
    { 
     if (!IsResponseOk(SendCommand("USER " + Email)) || 
      !IsResponseOk(SendCommand("PASS " + Password))) 
      throw new Exception("User/password not accepted"); 
    } 

    protected void Logout() 
    { 
     SendCommand("RSET"); 
     //SendCommand("QUIT"); 
    } 

    protected string SendCommand(string cmdtext) 
    { 
     Writer.WriteLine(cmdtext); 
     Writer.Flush(); 

     return ReadLine(); 
    } 

    protected string ReadLine() 
    { 
     return Reader.ReadLine() + "\r\n"; 
    } 

    protected string ReadLines() 
    { 
     StringBuilder b = new StringBuilder(); 

     while (true) 
     { 
      string temp = ReadLine(); 

      if (temp == ".\r\n" || temp.IndexOf("-ERR") != -1) 
       break; 

      b.Append(temp); 
     } 

     return b.ToString(); 
    } 

    protected static bool IsResponseOk(string response) 
    { 
     if (response.StartsWith("+OK")) 
      return true; 
     if (response.StartsWith("-ERR")) 
      return false; 

     throw new Exception("Cannot understand server response: " + 
      response); 
    } 
+1

显示相关的唯一代码从Gmail中发送邮件。通过SMTP发送电子邮件需要10行,而不是250行。无论如何库存在,因此您不必再次解决常见问题。您可能没有获得Gmail的身份验证权限。 – CodeCaster 2013-04-23 11:04:19

回答

2

显然SMTP服务器在接受邮件发送前需要验证。这是常见的,因为垃圾邮件发送者和骗子曾经使用“开放式中继”来推销他们的产品。

检查服务器的规则以查看它们将接受哪些验证。在http://en.wikipedia.org/wiki/SMTP_Authentication维基百科参考可能会有用。