Как прочитать последнее электронное письмо из Yahoo mail с помощью pop3 c#

#c# #pop3 #email-client #yahoo-mail #openpop

#c# #pop3 #почтовый клиент #yahoo-mail #openpop

Вопрос:

Я хочу прочитать электронное письмо из моей учетной записи Yahoo mail. Я использую «OpenPop.Pop3» для чтения электронной почты из моей учетной записи yahoo mail, я использую приведенный ниже код :-

 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 mail я могу получить тему, дату, но когда дошло до части сообщения, которая:

 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()
  

Пожалуйста, дайте мне знать, если я что-то упустил или делаю что-то неправильно.
Также у меня есть возможность доступа к электронным письмам yahoo Mail в любом месте с помощью POP.

Ответ №1:

Во-первых, основываясь на вашем фрагменте кода, вы загружаете каждое сообщение 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;
}