Microsoft Graph ile E-posta Mesajlarını ve Eklerini Yönet

Aspose.Email IGraphClient Microsoft Graph üzerinden e-posta mesajlarını ve eklerini yönetmek için kapsamlı bir yöntem yelpazesi sağlar.

Mevcut İşlemler:

  • Mesajları listele

  • Mesajları filtrele ve sayfalara ayır

  • Mesaj içeriğini getir

  • Mesajları oluştur ve gönder (taslaklar ve EML dahil)

  • Mesajları kopyala ve taşı

  • Ekleri yönet (oluştur, getir, sil, listele)

Mesajları Listele

"Inbox" gibi bir klasörden mesajları almak için şunu kullanın ListMessages metod.

  1. Klasör listesini şu şekilde al client.ListFolders().
  2. Her klasörü döngüye al.
  3. Klasörün görüntüleme adının "Inbox" olup olmadığını kontrol edin.
  4. Eğer öyleyse, gelen kutusundaki mesajları şunu kullanarak listele: client.ListMessages(folder.ItemId).
  5. Gelen kutusundaki her mesajı döngüye al.
  6. Her mesajın konusunu konsola yazdır.
var folders = client.ListFolders();

foreach (var folder in folders)
{
    if (folder.DisplayName.Equals("Inbox"))
    {
        // list messages in inbox
        var inboxMessages = client.ListMessages(folder.ItemId);

        foreach (var messageInfo in inboxMessages)
        {
            Console.WriteLine(messageInfo.Subject);
        }
    }
}

Microsoft Graph ile Asenkron Mesaj Listesi

Aşağıdaki kod örneği, Gelen Kutusu klasörüne erişmeyi, bir sayfa e-posta mesajı almayı gösterir: ListMessagesAsync, ve konularını yazdır:

var folders = await client.ListFoldersAsync();
foreach (var folder in folders)
{
    Console.WriteLine(folder.DisplayName);
}

var folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;
var msgsPage = await client.ListMessagesAsync(folderId, new PageInfo(15) { PageOffset = 0 }, null);
var msgs = msgsPage.Items;
foreach (var msg in msgs)
{
    Console.WriteLine(msg.Subject);
}

Gönderim Tarihine Göre Mesajları Filtrele

Bu OrderBy Kütüphane koleksiyonundaki yöntem, gönderim tarihine göre farklı sıralama düzenleri (artan ve azalan) ile mesajları almanıza olanak tanır. Aşağıdaki kod örneği, mesajları gönderim tarihine göre nasıl sıralayacağınızı gösterir:

  1. Graph Client’ı Başlat

  2. Sorgu Oluşturucu Oluştur

  3. Mesajları Tarihe Göre Sırala:

  • Azalan Sıralama

    • Kullan builder.SentDate.OrderBy(false) sıralamayı azalan olarak ayarlamak için.
    • Çağırın client.ListMessages() Inbox’tan 10 mesaj limitli almak için, sorguyu buradan kullanarak builder.GetQuery().
    • Alınan mesajları messages değişkeninde depolayın.
  • Artan Sıralama

    • Sıralamayı artan yapmak için şunu çağırın builder.SentDate.OrderBy(true).
    • Kullan client.ListMessages() tekrar Gelen Kutusundan mesajları almak için, bu kez artan sırada.
    • Bu mesajları messages değişkeninde saklayın.
IGraphClient client = GraphClient.GetClient(provider, TenantId);

var builder = new GraphQueryBuilder();

// create orderby messages query 'DESC'
builder.SentDate.OrderBy(false);
var messagePageInfo = client.ListMessages(KnownFolders.Inbox, new PageInfo(10), builder.GetQuery());
var messages = messagePageInfo.Items;

builder.Clear();

// create orderby messages query 'ASC'
builder.SentDate.OrderBy(true);
messagePageInfo = client.ListMessages(KnownFolders.Inbox, new PageInfo(10), builder.GetQuery());
messages = messagePageInfo.Items;

Sayfalama ve Filtreleme ile Mesajları Listele

Büyük posta kutularıyla çalışırken sayfalama kullanın. Aşağıdaki örnek, okunmamış mesajları 10’luk sayfalarda alır ve işlendikten sonra okundu olarak işaretler:

  1. İstemciyi başlat.
  2. Sayfa başına gösterilecek öğe sayısını ayarlayın, örneğin 10.
  3. Yalnızca okunmamış mesajları almak için bir filtre oluşturun GraphQueryBuilder sınıf. builder.IsRead.Equals(false) okunmamış mesajları filtreleme koşulunu ayarlamaktadır.
  4. Şuğu çağırın ListMessages İstemci nesnesindeki yöntem, klasörü (Inbox) ve sayfa başına öğe sayısını (PageInfo(itemsPerPage)) parametre olarak belirtir. Ayrıca okunmamış mesajları filtrelemek için sorgu nesnesini geçirir. Döndürülen PageInfo nesnesi (pageInfo), Items özelliğinde geçerli sayfa için alınan mesajları içerir.
  5. Son sayfaya ulaşılana kadar (pageInfo.LastPage false) devam eden bir döngü oluşturun. Alınan mesajlar, mevcut mesajlar listesine şunu kullanarak eklenir messages.AddRange(pageInfo.Items).
//  reading unread messages with paging
using var client = GraphClient.GetClient(tokenProvider, config.Tenant);

// paging option
var itemsPerPage = 10;
// create unread messages filter
GraphQueryBuilder builder = new GraphQueryBuilder();
builder.IsRead.Equals(false);
var query = builder.GetQuery();

// list messages
var pageInfo = client.ListMessages(KnownFolders.Inbox, new PageInfo(itemsPerPage), query);
var  messages = pageInfo.Items;

while (!pageInfo.LastPage)
{
    pageInfo = client.ListMessages(KnownFolders.Inbox, pageInfo.NextPage, query);
    messages.AddRange(pageInfo.Items);
}

// set messages state as read
foreach (var message in messages)
{
    client.SetRead(message.ItemId);
}

Bir Mesaj Al

Belirli bir mesajın tam içeriğini alın. Aşağıdaki kod örneği, Gelen Kutusundaki son mesajı görüntüleme veya işleme amacıyla nasıl alıp göstereceğinizi gösterir:

  1. Çağırın client.ListFolders() posta kutusundaki tüm erişilebilir klasörleri almak ve folders değişkenine depolamak için.
  2. folders koleksiyonundaki her klasörü bir foreach döngüsüyle yineleyin.
  3. Döngü içinde, klasörün görüntüleme adı "Inbox" eşit mi kontrol edin.
  4. Klasör Gelen Kutusu ise, mesajları şunu kullanarak al: client.ListMessages() klasör ItemId’si ile.
  5. Gelen kutusunda mesaj olup olmadığını, inboxMessages.Count değerinin 0’dan büyük olduğunu kontrol ederek doğrulayın.
  6. Eğer mesajlar varsa, ilk mesajı şunu kullanarak al: client.FetchMessage() ilk mesaj ItemId’si ile.
  7. Alınan mesajın HTML gövdesini çıktı olarak ver.
var folders = client.ListFolders();

foreach (var folder in folders)
{
    if (folder.DisplayName.Equals("Inbox"))
    {
        // list messages in inbox
        var inboxMessages = client.ListMessages(folder.ItemId);

        if (inboxMessages.Count > 0)
        {
            // fetch the first message in inbox
            var msg = client.FetchMessage(inboxMessages[0].ItemId);
            
            Console.WriteLine(msg.BodyHtml);
        }
        
    }
}

OData ile Microsoft Graph Sorguları

Aspose.Email for .NET, Microsoft Graph için OData sorgu desteği sağlar. Bu, geliştiricilerin klasörler, mesajlar, kişiler, takvim öğeleri ve daha fazlası gibi Graph kaynaklarıyla çalışırken gelişmiş filtreleme, sıralama, seçim, sayfalama ve genişletme uygulamasına olanak tanır. Aspose.Email.Clients.Graph.ODataQueryBuilder sınıfı, sorgu dizesi manuel olarak oluşturmaktansa OData sorgu parametrelerini yapılandırılmış bir şekilde oluşturmak için tasarlanmıştır. Bu sayede sadece gerekli alanları alabilirsiniz (Select) verimlilik için, filtreleme kullan (Filter) ve sıralama (OrderBy) veriyi düzenlemek için. Sayfalama da uygulayabilirsiniz (Top, Skip) büyük veri kümeleri için, ilgili varlıkları genişlet (Expand) tek bir çağrıda ve gelişmiş senaryolar için sayma ve tam metin aramayı etkinleştirir.

Aşağıda listesi bulunuyor GraphClient isteğe bağlı ** destekleyen yöntemlerODataQueryBuilder** parametresi:**

  • ListFolders
  • ListMessages
  • ListContacts
  • ListCalendarItems
  • ListAttachments
  • ListCategories
  • ListOverrides
  • ListRules
  • ListTaskLists
  • ListTasks
  • ListNotebooks

Aşağıdaki kod örneği ** kullanarak nasıl kullanılacağını gösterirODataQueryBuilder** klasörleri listelemek ve bir posta kutusundan filtrelenmiş, sıralanmış ve sayfalı e-posta mesajlarını almak için**

var accessParameters = Settings.User1;

var provider = new AzureConfidentialTokenProvider(
    accessParameters.TenantId,
    accessParameters.ClientId,
    accessParameters.ClientSecret);

var client = GraphClient.GetClient(provider, accessParameters.TenantId);

client.Resource = Aspose.Email.Clients.Graph.ResourceType.Users;
client.ResourceId = accessParameters.Username;
client.EndPoint = "https://graph.microsoft.com";

// Example 1: List folders ordered by name
var builder = new ODataQueryBuilder { OrderBy = "name asc" };
var folders = client.ListFolders(builder);

foreach (var folder in folders)
{
    Console.WriteLine(folder.DisplayName);
}

// Example 2: Retrieve filtered and paged messages from Inbox
var folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;

builder = new ODataQueryBuilder
{
    Filter = "startswith(name,'A')",
    OrderBy = "name asc",
    Top = 10,
    Skip = 5,
    Select = new[] { "name", "age" },
    Expand = new[] { "children", "parents" },
    Count = true,
    Search = "\"John Doe\"",
    Format = "json"
};

var msgs = client.ListMessages(folderId, builder);

foreach (var msg in msgs)
{
    Console.WriteLine(msg.Subject);
}

Mesaj Oluştur

Kullan CreateMessage yeni bir mesajı doğrudan Gelen Kutusu gibi belirli bir klasöre kaydetmek için bir metod. Aşağıdaki örnek, bir MapiMessage kullanarak doğrudan bir e-posta mesajı göndermenizi ve posta kutusuna eklemenizi sağlar.

var msg = new MapiMessage(OutlookMessageFormat.Unicode)
{
    Subject = "My message",
    Body = "Hi, it is my message"
};

msg.Recipients.Add("sam@to.com", "Sam", MapiRecipientType.MAPI_TO);

// create message in inbox
client.CreateMessage(KnownFolders.Inbox, msg);

Mesajları Gönder

Bu Gönder metodu IGraphClient size bir MapiMessage nesnesi. Bu örnekte, basit bir mesaj oluşturulur, gönderici ve alıcı detaylarıyla yapılandırılır ve ardından gönderilir.

// prepare the message
var msg = new MapiMessage(OutlookMessageFormat.Unicode)
{
    Subject = "My message",
    Body = "Hi, it is my message"
};

msg.Recipients.Add("sam@to.com", "Sam", MapiRecipientType.MAPI_TO);
msg.SetProperty(KnownPropertyList.SenderName, "John");
msg.SetProperty(KnownPropertyList.SentRepresentingEmailAddress, "John@from.com");

// send message
client.Send(msg);

Bir Taslak Mesaj Gönder

Bir mesajı Taslaklar klasörüne kaydedebilir ve daha sonra şunu kullanarak gönderebilirsiniz IGraphClient. Bu yaklaşım, bir mesaj hazırlamanıza, göndermeden önce gözden geçirip değiştirmenize ve hazır olduğunda göndermenize olanak tanır. Aşağıdaki kod örneği, bir e-posta oluşturmayı, meta verileri eklemeyi, taslak olarak saklamayı ve ardından göndermeyi gösterir:

  1. Bir oluştur MapiMessage konu, gövde ve alıcılarla.
  2. Gönderen bilgilerini mesaj özellikleriyle ayarlayın.
  3. Mesajı Taslaklar klasörüne kaydetmek için şunu kullanın CreateMessage.
  4. Taslağı, ItemId’sini şuna geçirerek gönderin Send() metod.
// prepare the message
var msg = new MapiMessage(OutlookMessageFormat.Unicode)
{
    Subject = "My message",
    Body = "Hi, it is my message"
};

msg.Recipients.Add("sam@to.com", "Sam", MapiRecipientType.MAPI_TO);
msg.SetProperty(KnownPropertyList.SenderName, "John");
msg.SetProperty(KnownPropertyList.SentRepresentingEmailAddress, "John@from.com");

// add message to Draft folder
var draftMessage = client.CreateMessage(KnownFolders.Drafts, msg);

// send a draft message
client.Send(draftMessage.ItemId);

Bir EML Mesajı Gönder

Kullan MailMessage sınıfı, EML biçimli mesajlar oluşturup göndermek için. Aşağıdaki kod örneği, Graph API kullanarak bir e-posta mesajı oluşturup göndermeyi gösterir:

// prepare the message
var eml = new MailMessage
{
    From = "from@domain.com",
    To = "to1@domain.com, to2@domain.com",
    Subject = "New message",
    HtmlBody = "<html><body>This is the HTML body</body></html>"
};

// send the message
graphClient.Send(eml);
graphClient.Create(KnownFolders.Inbox, eml);

Mesajları Kopyala

Mevcut bir e-posta mesajının kopyasını oluşturmak için şunu kullanın CopyMessage metodu IGraphClient arayüzü.


// copy message to Inbox folder
var copiedMsg = client.CopyMessage(KnownFolders.Inbox, msg.ItemId);

Mesajları Taşı

Mevcut bir e-posta mesajını mevcut konumundan yeni bir klasöre taşımak için şunu kullanın MoveMessage metodu IGraphClient arayüzü.

// move message to Inbox folder
var movedMsg = client.MoveMessage(KnownFolders.Inbox, msg.ItemId);

Ekleri Yönet

Bu IGraphClient Aspose.Email for .NET’te, e-posta ekleriyle programlı olarak çalışmanıza izin verir. Bu, bir mesajla ilişkili ekleri oluşturma, alma, silme ve listeleme gibi işlemleri kapsar. Aşağıdaki kod örneği, Outlook mesajları için Microsoft Graph API kullanarak Aspose.Email ile ek yaşam döngüsünün tam yönetimini gösterir. Ek içeriğini ve meta verilerini ihtiyacınıza göre özelleştirebilirsiniz.


// create an attachment
var attachment = new MapiAttachment();
attachment.SetProperty(KnownPropertyList.DisplayName, "My Attachment");
attachment.SetProperty(KnownPropertyList.AttachDataBinary, new byte[1024]);

// add an attachment to message
var createdAttachment = client.CreateAttachment(messageInfo.ItemId, attachment);

// fetch a message attachment
var fetchedAttachment = client.FetchAttachment(createdAttachment.ItemId);

// delete a message attachment 
client.DeleteAttachment(createdAttachment.ItemId);

// list the message attachments
var attachments = client.ListAttachments(messageInfo.ItemId);