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 は最終的に文句を言います。これは、1 つのソースから多数のクライアントがサーバーに接続しているようなものです。これは、コードをテストしていないときは、多くの場合、電子メールの悪用の兆候です。

TcpClient tcpclient = new TcpClient();  // Hello, new.
tcpclient.Connect("pop3.live.com", 995);

サーバーでやるべきことがたくさんある場合は、1 つの接続をより長くアクティブに保ち、完了したら閉じます。

質問のコードを実行するたびに、tcpclient.Close()pop3.live.com への接続が作成されます (-ing ではありません)。通常、コードをいじっているときにエラーが原因で適切に閉じられない接続が多数ある場合にのみ、このエラーが発生します。

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 に答える