使用以下代码,我从我的hotmail帐户读取消息。但有时会出现以下错误。 -ERR Exceeded the login limit for a 15 minute period. Reduce the frequency of requests to the POP3 server
.谁能告诉我这是什么原因?是服务器问题还是其他问题?除了 POP3 之外,我们还可以将任何其他协议用于 Hotmail?
public string hotmail(string username, string password)
{
string result = "";
string str = string.Empty;
string strTemp = string.Empty;
try
{
TcpClient tcpclient = new TcpClient();
tcpclient.Connect("pop3.live.com", 995);
System.Net.Security.SslStream sslstream = new SslStream(tcpclient.GetStream());
sslstream.AuthenticateAsClient("pop3.live.com");
System.IO.StreamWriter sw = new StreamWriter(sslstream);
System.IO.StreamReader reader = new StreamReader(sslstream);
strTemp = reader.ReadLine();
sw.WriteLine("USER" + " " + username);
sw.Flush();
strTemp = reader.ReadLine();
sw.WriteLine("PASS" + " " + password);
sw.Flush();
strTemp = reader.ReadLine();
string[] numbers = Regex.Split(strTemp, @"D+");
int a = 0;
foreach (string value in numbers)
{
if (!string.IsNullOrEmpty(value))
{
int i = int.Parse(value);
numbers[a] = i.ToString();
a++;
}
}
sw.WriteLine("RETR" + " " + numbers[0]);
sw.Flush();
strTemp = reader.ReadLine();
while ((strTemp = reader.ReadLine()) != null)
{
if (strTemp == ".")
{
break;
}
if (strTemp.IndexOf("-ERR") != -1)
{
break;
}
str += strTemp;
}
sw.WriteLine("Quit ");
sw.Flush();
result = str;
return result;
}
Catch ( Exception ex)
{}
return result;
}
提前感谢..
您可以使用任何其他协议吗? 是的,hotmail/outlook.com现在支持IMAP。
但是这里的代码的问题似乎是每次运行它时都会创建一个新TcpClient
。 如果你连续多次运行它,Outlook.com/Hotmail 最终会抱怨。 就好像你有来自单一来源的大量客户端连接到他们的服务器,当它不测试代码时,这通常是电子邮件滥用的迹象。
TcpClient tcpclient = new TcpClient(); // Hello, new.
tcpclient.Connect("pop3.live.com", 995);
如果您在服务器上有很多事情要做,请使单个连接保持更长时间的活动状态,并在完成后将其关闭。
每次运行问题中的代码时,您都在创建(而不是tcpclient.Close()
-ing)与 pop3.live.com 的连接。 通常,当我有很多连接由于我弄乱代码时的错误而无法正确关闭时,我通常才会收到此错误。
MSDN实际上有一个不错的TcpClient示例,但您可能对SO的另一个示例更感兴趣。 看看它如何使用using
,并在里面嵌套一个循环。
using (TcpClient client = new TcpClient())
{
client.Connect("pop3.live.com", 995);
while(variableThatRepresentsRunning)
{
// talk to POP server
}
}
顺便说一下,我在这里能给出的最好的建议是告诉你不要重新发明轮子(除非你只是玩POP服务器。 通过 TCP 抛出命令可能很有趣,尤其是使用 IMAP 时)。
OpenPop.NET 是一个很棒的库来处理 C# 中的 POP 请求,包括一个很好的 MIME 解析器,如果你还在研究这个,应该会加快你的速度。它的示例页面非常出色。
转到邮件收件箱,您可能会收到有关此邮件并接受它。否则,请尝试在一段时间后发出请求。因为使用弹出设置阅读邮件有一些限制google
。