2

yahooメールアカウントからメールを読みたいです。「OpenPop.Pop3」を使用して、yahoo メール アカウントからメールを読み込んでいます。以下のコードを使用しています。

using OpenPop.Pop3;    

public DataTable ReadEmailsFromId()
{
    DataTable table = new DataTable();
    try
    {
        using (Pop3Client client = new Pop3Client())
        {
            client.Connect("pop.mail.yahoo.com", 995, true); //For SSL                
            client.Authenticate("Username", "Password", AuthenticationMethod.UsernameAndPassword);

            int messageCount = client.GetMessageCount();
            for (int i = messageCount; i > 0; i--)
            {
                table.Rows.Add(client.GetMessage(i).Headers.Subject, client.GetMessage(i).Headers.DateSent);
                string msdId = client.GetMessage(i).Headers.MessageId;
                OpenPop.Mime.Message msg = client.GetMessage(i);
                OpenPop.Mime.MessagePart plainTextPart = msg.FindFirstPlainTextVersion();
                string message = plainTextPart.GetBodyAsText();                           
            }
        }
    }
return table;
}

同じコードは、gmail、outlook などの他のメールの電子メールにアクセスできますが、yahoo メールの電子メールを操作しているときに、件名、日付を取得できますが、メッセージ部分に来ると、次のようになります。

OpenPop.Mime.Message msg = client.GetMessage(i);
OpenPop.Mime.MessagePart plainTextPart = msg.FindFirstPlainTextVersion();

「応答の取得に使用されたストリームが閉じられました」というエラーが表示されます。

「スタックトレース」は次のとおりです。

at OpenPop.Pop3.Pop3Client.IsOkResponse(String response)
at OpenPop.Pop3.Pop3Client.SendCommand(String command)
at OpenPop.Pop3.Pop3Client.Disconnect()
at OpenPop.Pop3.Pop3Client.Dispose(Boolean disposing)
at OpenPop.Pop3.Disposable.Dispose()

何かが足りない、または何か間違っている場合はお知らせください。また、POP を使用してどこからでもアクセスできる yahoo メールのメールを作成しました。

4

1 に答える 1

0

まず、コード スニペットに基づいて、各メッセージを 4 回ダウンロードしています。それは非常に遅くなるでしょう。

エラーが発生する理由については、わかりません。MailKitを使用してもエラーは発生しません:

using MimeKit;
using MailKit;
using MailKit.Net.Pop3;    

public DataTable ReadEmailsFromId()
{
    DataTable table = new DataTable();
    try
    {
        using (Pop3Client client = new Pop3Client())
        {
            client.Connect("pop.mail.yahoo.com", 995, true); //For SSL                
            client.Authenticate("Username", "Password");

            for (int i = client.Count - 1; i >= 0; i--)
            {
                var msg = client.GetMessage (i);

                table.Rows.Add(msg.Subject, msg.Date);
                string msdId = msg.MessageId;
                string message = msg.TextBody;
            }
        }
    }
return table;
}
于 2016-10-24T17:39:15.730 に答える