C# IMAP ile mailleri alma

473562

Hectopat
Katılım
30 Haziran 2021
Mesajlar
886
Makaleler
2
Çözümler
12
Böyle bir kod yazdım. IMAP sunucusundan gelen mailleri işliyor. Ama yazdığım kod tüm mailleri teker teker sıralıyor. Ben uygulama açıldığı tarihten sonra atılan maillerin gelmesini istiyorum kısaca anlık mail. Nasıl yaparım?

C#:
using (var client = new ImapClient())
{
    client.Connect(imapServer, imapPort, true);

    client.Authenticate(email, password);

    var inbox = client.Inbox;
    inbox.Open(FolderAccess.ReadWrite);

    while (true)
    {
        int messageCount = inbox.Count;

        if (messageCount > 0)
        {
            for (int i = 0; i < messageCount; i++)
            {
                var message = inbox.GetMessage(i);
                MessageBox.Show($"Yeni e-posta: {message.Subject}");
            }

            inbox.Expunge();
        }

        Thread.Sleep(TimeSpan.FromMinutes(1));
    }
}
 
Sunu bir dener misiniz hocam?

C#:
using (var client = new ImapClient())
{
    DateTime currentDate = DateTime.Now;
    client.Connect(imapServer, imapPort, true);

    client.Authenticate(email, password);

    var inbox = client.Inbox;
    inbox.Open(FolderAccess.ReadWrite);

    while (true)
    {
        int messageCount = inbox.Count;

        if (messageCount > 0)
        {
            for (int i = 0; i < messageCount; i++)
            {
                var message = inbox.GetMessage(i);
                if (message.Date > currentDate)
                {
                    MessageBox.Show($"Yeni e-posta: {message.Subject}");
                }
            }

            inbox.Expunge();
        }

        Thread.Sleep(TimeSpan.FromMinutes(1));
    }
}
 
Bu kullanım teoride doğru, pratikte hatalıdır. Client’a bütün veriyi çekip kontrol etmek performans zafiyetine sebep olur.

Onun yerine IMAP sunucusundan fitreli veri istemek daha doğrudur. StackOverFlow’da böyle bir syntax mevcut. Bunu kendinize göre düzenleyerek daha sağlıklı bir düzenleme yapabilirsiniz.
C#:
var messages = inbox.SearchParse("SEARCH SINCE 27-Nov-2011 NOT BEFORE 28-NOV-2011");
 
Dogrudur hocam farkindayim. Ayakustu problemin cozulmesiyle ilgili kafa yuruteyim dedim. IMAP kutuphanesini kullanmamistim cunku daha once.
 
Evet bu kod çalıştı. Teşekkürler ama yazdığınız kodun aynısıyla zaten sorunu çözmüştüm.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…