验证要求错误,smtp
本文关键字:smtp 错误 验证 | 更新日期: 2023-09-27 18:10:24
这是我下面的完整代码,请需要帮助,我一直试图通过gmail发送电子邮件,我得到这个错误"530-5.5.1身份验证需要",异常发生在这一行称为" send()"的方法中:(见下面的完整代码),我不使用c#库出于某种原因,所以我需要得到这个工作,谢谢。
//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@gmail.com";
Password = "xxxxxxx";
to = new List<String>() { "reciever@gmail.com"};
from = "sender@gmail.com";
}
//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);
}
显然,SMTP服务器在接受邮件发送之前需要进行身份验证。这很常见,因为垃圾邮件发送者和骗子过去常常使用"开放中继"来兜售他们的商品。
检查服务器的规则,看看它们将接受什么样的身份验证。