Kelola Pesan Email & Lampiran dengan Microsoft Graph

Aspose.Email IGraphClient menyediakan berbagai metode untuk mengelola pesan email dan lampirannya melalui Microsoft Graph.

Operasi yang Tersedia:

  • Daftar pesan

  • Filter dan halaman pesan

  • Ambil konten pesan

  • Buat dan kirim pesan (termasuk draf dan EML)

  • Salin dan pindahkan pesan

  • Kelola lampiran (buat, ambil, hapus, daftar)

Daftar Pesan

Untuk mengambil pesan dari folder seperti "Inbox", gunakan ListMessages metode.

  1. Mengambil daftar folder menggunakan client.ListFolders().
  2. Loop melalui setiap folder.
  3. Periksa apakah nama tampilan folder adalah "Inbox".
  4. Jika iya, daftar pesan di inbox menggunakan client.ListMessages(folder.ItemId).
  5. Loop melalui setiap pesan di inbox.
  6. Cetak subjek setiap pesan ke konsol.
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);
        }
    }
}

Daftar Pesan Secara Asinkron dengan Microsoft Graph

Contoh kode berikut menunjukkan cara mengakses folder Inbox, mengambil satu halaman pesan email dengan ListMessagesAsync, dan cetak subjek mereka:

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);
}

Filter Pesan berdasarkan Tanggal Pengiriman

The OrderBy metode dari koleksi perpustakaan memungkinkan Anda mengambil pesan dengan urutan penyortiran yang berbeda (menaik dan menurun) berdasarkan tanggal pengirimannya. Contoh kode berikut menunjukkan cara mengurutkan pesan berdasarkan tanggal pengiriman:

  1. Inisialisasi Graph Client

  2. Buat Query Builder

  3. Urutkan Pesan berdasarkan Tanggal di:

  • Urutan Menurun

    • Gunakan builder.SentDate.OrderBy(false) untuk mengatur urutan menjadi menurun.
    • Panggil client.ListMessages() untuk mendapat pesan dari Inbox dengan batas 10, menggunakan kueri dari builder.GetQuery().
    • Simpan pesan yang diambil dalam variabel messages.
  • Urutan Naik

    • Atur urutan menjadi naik dengan memanggil builder.SentDate.OrderBy(true).
    • Gunakan client.ListMessages() lagi untuk mengambil pesan dari Inbox, sekarang dalam urutan naik.
    • Simpan pesan-pesan ini dalam variabel messages.
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;

Daftar Pesan dengan Paging dan Filtering

Gunakan paging saat bekerja dengan kotak surat besar. Contoh di bawah mengambil pesan yang belum dibaca dalam halaman berisi 10 dan menandainya sebagai terbaca setelah diproses:

  1. Inisialisasi klien.
  2. Atur jumlah item yang ditampilkan per halaman, misalnya, 10.
  3. Buat filter untuk hanya mengambil pesan belum dibaca menggunakan GraphQueryBuilder kelas. The builder.IsRead.Equals(false) menetapkan kondisi untuk memfilter pesan yang belum dibaca.
  4. Panggil ListMessages metode pada objek klien, menentukan folder (Inbox) dan item per halaman (PageInfo(itemsPerPage)) sebagai parameter. Ini juga meneruskan objek query untuk menerapkan filter pesan belum dibaca. Objek PageInfo yang dikembalikan (pageInfo) berisi pesan yang diambil untuk halaman saat ini di properti Items.
  5. Buat loop yang berlanjut hingga halaman terakhir tercapai (pageInfo.LastPage bernilai false). Pesan yang diambil ditambahkan ke daftar pesan yang ada menggunakan 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);
}

Ambil Pesan

Ambil konten lengkap dari pesan tertentu. Contoh kode berikut menunjukkan cara mengambil dan menampilkan pesan terbaru di Inbox untuk penampilan atau pemrosesan:

  1. Panggil client.ListFolders() untuk mengambil semua folder yang tersedia di kotak surat dan menyimpannya dalam variabel folders.
  2. Iterasi setiap folder dalam koleksi folder menggunakan loop foreach.
  3. Di dalam loop, periksa apakah nama tampilan folder sama dengan "Inbox".
  4. Jika folder adalah Inbox, ambil pesan menggunakan client.ListMessages() dengan ItemId folder.
  5. Periksa apakah ada pesan di inbox dengan memverifikasi bahwa inboxMessages.Count lebih besar dari 0.
  6. Jika ada pesan, ambil pesan pertama menggunakan client.FetchMessage() dengan ItemId pesan pertama.
  7. Keluarkan isi HTML dari pesan yang diambil.
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);
        }
        
    }
}

Kueri Microsoft Graph dengan OData

Aspose.Email untuk .NET menyediakan dukungan kueri OData untuk Microsoft Graph. Ini memungkinkan pengembang menerapkan filtering lanjutan, pengurutan, seleksi, paging, dan ekspansi saat bekerja dengan sumber daya Graph seperti folder, pesan, kontak, item kalender, dan lainnya. Aspose.Email.Clients.Graph.ODataQueryBuilder kelas dibangun untuk membuat parameter kueri OData secara terstruktur alih-alih membangun string kueri secara manual. Dengan cara ini, Anda dapat mengambil hanya bidang yang diperlukan (Select) untuk efisiensi, gunakan filtering (Filter) dan pengurutan (OrderBy) untuk mengatur data. Anda juga dapat menerapkan pagination (Top, Skip) untuk dataset besar, perluas entitas terkait (Expand) dalam satu panggilan, dan mengaktifkan penghitung serta pencarian teks lengkap untuk skenario lanjutan.

Berikut daftar GraphClient metode yang mendukung ** opsionalODataQueryBuilder** parameter:**

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

Contoh kode berikut menunjukkan cara menggunakan ODataQueryBuilder untuk mendaftar folder dan mengambil pesan email yang difilter, diurutkan, dan dipaginasi dari sebuah kotak surat:**

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);
}

Buat Pesan

Gunakan CreateMessage metode untuk menyimpan pesan baru secara langsung ke dalam folder tertentu, seperti Inbox. Contoh berikut menunjukkan cara membangun sebuah MapiMessage dan menambahkannya ke kotak surat.

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

Kirim Pesan

The Kirim metode dari IGraphClient memungkinkan Anda mengirim pesan email secara langsung menggunakan sebuah MapiMessage objek. Pada contoh ini, sebuah pesan sederhana dibuat, dikonfigurasi dengan detail pengirim dan penerima, lalu dikirim.

// 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);

Kirim Pesan Draf

Anda dapat menyimpan pesan ke folder Drafts dan mengirimnya nanti menggunakan IGraphClient. Pendekatan ini memungkinkan Anda menyiapkan pesan, meninjau atau memodifikasinya sebelum dikirim, dan kemudian mengirimkannya ketika siap. Contoh kode berikut menunjukkan cara membuat email, menambahkan metadata, menyimpannya sebagai draf, lalu mengirimkannya:

  1. Buat sebuah MapiMessage dengan subjek, isi, dan penerima.
  2. Atur detail pengirim menggunakan properti pesan.
  3. Simpan pesan ke folder Drafts menggunakan CreateMessage.
  4. Kirim draf dengan memberikan ItemId-nya ke Send() metode.
// 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);

Kirim Pesan EML

Gunakan MailMessage kelas untuk membuat dan mengirim pesan berformat EML. Contoh kode berikut menunjukkan cara membuat dan mengirim pesan email menggunakan Graph API:

// 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);

Salin Pesan

Untuk membuat duplikat pesan email yang ada, gunakan CopyMessage metode dari IGraphClient antarmuka.


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

Pindahkan Pesan

Untuk memindahkan pesan email yang ada dari lokasi saat ini ke folder baru, gunakan MoveMessage metode dari IGraphClient antarmuka.

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

Kelola Lampiran

The IGraphClient di Aspose.Email untuk .NET memungkinkan Anda bekerja dengan lampiran email secara programatis. Ini termasuk membuat, mengambil, menghapus, dan menampilkan lampiran yang terkait dengan sebuah pesan. Contoh kode berikut menunjukkan manajemen siklus hidup lampiran secara lengkap untuk pesan Outlook melalui Microsoft Graph API menggunakan Aspose.Email. Anda dapat menyesuaikan konten dan metadata lampiran sesuai kebutuhan.


// 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);