Neo
Neo

Reputation: 857

530-5.5.1 Authentication required error, smtp

here is my FULL code below,Please need help, I have been trying to send email via gmail, I get this error "530-5.5.1 Authentication required", the exception occurs in the method called "Send()" on this line here: (see full code below), I am not using the c# library for some reason, so I need to get this to work, thanks.

 //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);
    }

Upvotes: 0

Views: 3283

Answers (1)

Brian O&#39;&#39;Byrne
Brian O&#39;&#39;Byrne

Reputation: 560

Clearly the SMTP server requires authentication before accepting mail to send. This is commonplace as spammers and scammers used to use 'open relays' to peddle their wares.

Check the rules for the server to see what authentication they will accept. The Wikipedia reference at http://en.wikipedia.org/wiki/SMTP_Authentication might be useful.

Upvotes: 2

Related Questions