-1

次のコードを使用して、winform で gmail、yahoo、hotmail からの新着メールを読むことができますTcpClient。しかし、特定の人から送信された、または特定の件名を含むメールを取得したいと考えています。さらに多くの記事を検索しましたが、正しく機能するものは見つかりませんでした。誰もそれを行う方法を教えてもらえますか?

 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

POP3 では、メッセージをフィルタリングして取得することはできません。ダウンロードする前にメッセージをフィルタリングする場合は、IMAP4 プロトコルを使用する必要があります。

pop3 の RFC を参照してください: http://www.ietf.org/rfc/rfc1939.txtおよび IMAP4 の場合: https://www.rfc-editor.org/rfc/rfc3501

于 2013-09-18T04:56:59.883 に答える
1

@tray のアドバイスに従って、次のようにメッセージを取得し、from アドレスまたは件名に基づいてフィルタリングする必要があります。

public void check()
    {
        string sub;
        string result,from;
        int i = 1;
        do
        {
            ImapClient ic = new ImapClient("imap.mail.yahoo.com", "user@yahoo.com", "password", ImapClient.AuthMethods.Login, 993, true);
            ic.SelectMailbox("INBOX");
            int n = ic.GetMessageCount();

            MailMessage mail = ic.GetMessage(n - i);
            ic.Dispose();
            sub = mail.Subject;
            from = mail.From.ToString();
            result = mail.Raw;

            i++;
        } while (sub != "subject" || from == "person@example.com");
        string mailmsg = result;
    }

メッセージによっては時間がかかります。乾杯 ...

于 2013-09-18T05:45:07.710 に答える