2

使用以下代码,我从我的 hotmail 帐户中读取了 msg。但有时会出现以下错误。-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;
  }

提前致谢 ..

4

2 回答 2

1

您可以使用任何其他协议吗?是的,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 here的另一个示例更感兴趣。看看它是如何使用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 解析器,并且,如果您仍在研究这个,应该会加快您的速度。它的示例页面非常好。

于 2014-01-11T07:11:38.110 回答
0

前往邮件收件箱,您可能会收到与此相关的邮件并接受。否则尝试在一段时间后提出请求。因为google使用弹出设置阅读邮件有一些限制。

于 2013-10-19T10:47:34.207 回答