Member 14131874 Ответов: 1

Последние 1 час почту по протоколу IMAP


Всем Привет,

Мне нужно написать код, который может возвращать список почтовых сообщений только за последние 1 час.
Но код не работает нормально.

Мне нужна помощь в этом деле. Любая помощь будет оценена по достоинству

Спасибо!
В anmol

Что я уже пробовал:

public void mail()
        {
            

            Imap client = new Imap();
            // connect to server
            client.Connect("imap.gmail.com", 993, SslMode.Implicit);
            // authenticate
            client.Login("abc@gmail.com", "abc123456");
            // select folder
            client.SelectFolder("Inbox");
            ImapMessageCollection messages = client.GetMessageList(ImapListFields.Envelope);
            if (con.State != ConnectionState.Open)
            {
                con.Open();
            }
            
            foreach (ImapMessageInfo message in messages)
            {
               
               // string todaydate = DateTime.Now.ToString("dd/MM/yyyy");
                if (cDate(message.Header("Date")) < DateTime.Now cDate(message.Header("Date")) > DateTime.Now.AddHours(-1))
                {
                    //CODE TO ADD SELECTED MAIL INTO  LIST OF MAIL MESSAGE
                }
                
            }
              if (con.State == ConnectionState.Open)
                {
                    con.Close();
                }
            
        }

1 Ответов

Рейтинг:
1

RickZeeland

Я могу порекомендовать вам эту библиотеку: GitHub - jstedfast/MimeKit: библиотека создания и синтаксического анализа .NET MIME с поддержкой катушек S/MIME, PGP, DKIM, TNEF и Unix mbox.[^]

Это позволяет вам получать новую почту Вот так:

public static void DownloadNewMessages()
        {
            using (var client = new ImapClient())
            {
                client.Connect(imapHost, port);
                client.Authenticate(userName, passWord);
                client.Inbox.Open(FolderAccess.ReadOnly);

                var uids = client.Inbox.Search(SearchQuery.New);

                foreach (var uid in uids)
                {
                    var message = client.Inbox.GetMessage(uid);

                    // write the message to a file
                    message.WriteTo(string.Format("{0}.eml", uid));
                }

                client.Disconnect(true);
            }
        }

Для получения почты через определенное время см. DeliveredAfter или SentAfter метод:
Класс SearchQuery[^]