จัดการข้อความอีเมลและไฟล์แนบด้วย Microsoft Graph
Aspose.Email IGraphClient ให้เมธอดหลากหลายเพื่อจัดการข้อความอีเมลและไฟล์แนบผ่าน Microsoft Graph.
การดำเนินการที่มีให้:
-
แสดงรายการข้อความ
-
กรองและแบ่งหน้าในข้อความ
-
ดึงเนื้อหาข้อความ
-
สร้างและส่งข้อความ (รวมถึงฉบับร่างและ EML)
-
คัดลอกและย้ายข้อความ
-
จัดการไฟล์แนบ (สร้าง, ดึง, ลบ, รายการ)
- รายการ ข้อความ
- ดึง ข้อความ
- สร้าง ข้อความ
- ส่ง ข้อความ
- คัดลอกข้อความ ข้อความ
- ย้าย ข้อความ
- CreateAttachment
- FetchAttachment
- DeleteAttachment
- ListAttachments
แสดงรายการข้อความ
เพื่อดึงข้อความจากโฟลเดอร์เช่น "Inbox" ให้ใช้ ListMessages เมธอด.
- ดึงรายการโฟลเดอร์โดยใช้ client.ListFolders().
- วนลูปแต่ละโฟลเดอร์.
- ตรวจสอบว่าชื่อการแสดงผลของโฟลเดอร์คือ "Inbox"
- หากเป็นเช่นนั้น ให้แสดงรายการข้อความใน inbox โดยใช้ client.ListMessages(folder.ItemId).
- วนลูปแต่ละข้อความใน inbox.
- พิมพ์หัวข้อของแต่ละข้อความไปยังคอนโซล.
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
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเข้าถึงโฟลเดอร์ Inbox ดึงหน้าของข้อความอีเมลด้วย ListMessagesAsync, และพิมพ์หัวข้อของพวกเขา:
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);
}
กรองข้อความตามวันที่ส่ง
นี้ OrderBy เมธอดจากคอลเลกชันของไลบรารีช่วยให้คุณดึงข้อความด้วยลำดับการจัดเรียงที่ต่างกัน (จากน้อยไปหามากและจากมากไปหาน้อย) ตามวันที่ส่ง ตัวอย่างโค้ดต่อไปนี้แสดงวิธีจัดเรียงข้อความตามวันที่ส่ง:
-
เริ่มต้น Graph Client
- สร้างอินสแตนซ์ของ IGraphClient โดยใช้ GraphClient.GetClient() พร้อมกับ provider และ TenantId.
-
สร้าง Query Builder
- สร้างอินสแตนซ์ของ GraphQueryBuilder อ็อบเจ็กต์.
-
เรียงลำดับข้อความตามวันที่ใน:
-
ลำดับจากมากไปน้อย
- ใช้
builder.SentDate.OrderBy(false)เพื่อกำหนดลำดับเป็นจากมากไปน้อย. - เรียก client.ListMessages() เพื่อดึงข้อความจาก Inbox โดยจำกัดที่ 10 รายการ โดยใช้คิวรีจาก builder.GetQuery().
- เก็บข้อความที่ดึงมาไว้ในตัวแปร messages.
- ใช้
-
ลำดับจากน้อยไปมาก
- ตั้งค่าลำดับเป็นจากน้อยไปมากโดยเรียก
builder.SentDate.OrderBy(true). - ใช้ client.ListMessages() อีกครั้งเพื่อดึงข้อความจาก Inbox ตอนนี้ตามลำดับจากน้อยไปมาก.
- เก็บข้อความเหล่านี้ไว้ในตัวแปร 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;
แสดงรายการข้อความพร้อมการแบ่งหน้าและการกรอง
ใช้การแบ่งหน้าเมื่อทำงานกับกล่องเมลขนาดใหญ่ ตัวอย่างด้านล่างดึงข้อความที่ยังไม่ได้อ่านเป็นหน้าละ 10 รายการและทำเครื่องหมายว่าอ่านแล้วหลังจากประมวลผล:
- เริ่มต้นไคลเอ็นต์.
- ตั้งค่าจำนวนรายการต่อหน้าที่จะแสดง เช่น 10.
- สร้างตัวกรองเพื่อดึงเฉพาะข้อความที่ยังไม่ได้อ่านโดยใช้ GraphQueryBuilder คลาส. เมธอด
builder.IsRead.Equals(false)กำหนดเงื่อนไขสำหรับการกรองข้อความที่ยังไม่ได้อ่าน. - เรียกใช้ ListMessages เมธอดบนอ็อบเจ็กต์ client โดยระบุโฟลเดอร์ (Inbox) และจำนวนรายการต่อหน้า (PageInfo(itemsPerPage)) เป็นพารามิเตอร์ นอกจากนี้ยังส่งอ็อบเจ็กต์ query เพื่อใช้ตัวกรองข้อความที่ยังไม่ได้อ่าน วัตถุ PageInfo ที่ส่งกลับ (pageInfo) มีข้อความที่ดึงมาสำหรับหน้าปัจจุบันในคุณสมบัติ Items.
- สร้างลูปที่ทำงานต่อไปจนกว่าจะถึงหน้าสุดท้าย (pageInfo.LastPage เป็น false) ข้อความที่ดึงมาจะถูกเพิ่มเข้าไปในรายการข้อความที่มีอยู่โดยใช้
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);
}
ดึงข้อความ
ดึงเนื้อหาครบถ้วนของข้อความเฉพาะ ตัวอย่างโค้ดต่อไปนี้แสดงวิธีดึงและแสดงข้อความล่าสุดใน Inbox เพื่อแสดงหรือประมวลผล:
- เรียก client.ListFolders() เพื่อดึงโฟลเดอร์ทั้งหมดที่มีในกล่องเมลและเก็บไว้ในตัวแปร folders.
- วนซ้ำแต่ละโฟลเดอร์ในคอลเลกชันของโฟลเดอร์โดยใช้ลูป foreach.
- ภายในลูป ตรวจสอบว่าชื่อการแสดงผลของโฟลเดอร์เท่ากับ "Inbox"
- หากโฟลเดอร์คือ Inbox ให้ดึงข้อความโดยใช้ client.ListMessages() ด้วย ItemId ของโฟลเดอร์.
- ตรวจสอบว่ามีข้อความใดใน inbox หรือไม่โดยตรวจสอบว่า inboxMessages.Count มากกว่า 0.
- หากมีข้อความ ให้ดึงข้อความแรกโดยใช้ client.FetchMessage() ด้วย ItemId ของข้อความแรก.
- แสดงผลส่วนหัวของ HTML ของข้อความที่ดึงมา
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);
}
}
}
การคิวรี Microsoft Graph ด้วย OData
Aspose.Email สำหรับ .NET ให้การสนับสนุน การคิวรี OData สำหรับ Microsoft Graph ซึ่งช่วยให้นักพัฒนาสามารถใช้การกรองขั้นสูง การจัดลำดับ การเลือก การแบ่งหน้า และการขยายเมื่อติดต่อกับทรัพยากร Graph เช่น โฟลเดอร์ ข้อความ รายชื่อผู้ติดต่อ รายการปฏิทิน และอื่นๆ Aspose.Email.Clients.Graph.ODataQueryBuilder คลาสถูกสร้างเพื่อสร้างพารามิเตอร์คิวรี OData อย่างมีโครงสร้าง แทนการสร้างสตริงคิวรีด้วยตนเอง วิธีนี้ทำให้คุณดึงเฉพาะฟิลด์ที่จำเป็น (Select) เพื่อประสิทธิภาพ ใช้การกรอง (Filter) และการจัดลำดับ (OrderBy) เพื่อจัดระเบียบข้อมูล คุณยังสามารถทำการแบ่งหน้า (Top, Skip) สำหรับชุดข้อมูลขนาดใหญ่ ขยายเอนทิตีที่เกี่ยวข้อง (Expand) ในหนึ่งการเรียก และเปิดใช้งานการนับและการค้นหาแบบเต็มข้อความสำหรับสถานการณ์ขั้นสูง.
ด้านล่างเป็นรายการของ GraphClient เมธอดที่รองรับ ** ตัวเลือก**ODataQueryBuilder** พารามิเตอร์:**
ListFoldersListMessagesListContactsListCalendarItemsListAttachmentsListCategoriesListOverridesListRulesListTaskListsListTasksListNotebooks
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีใช้ ODataQueryBuilder เพื่อแสดงรายการโฟลเดอร์และดึงข้อความอีเมลที่กรอง คัดลำดับ และแบ่งหน้า จากกล่องเมล:**
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);
}
สร้างข้อความ
ใช้ CreateMessage เมธอดเพื่อบันทึกข้อความใหม่โดยตรงลงในโฟลเดอร์เฉพาะ เช่น Inbox ตัวอย่างต่อไปนี้แสดงวิธีสร้าง MapiMessage และเพิ่มเข้าภายในกล่องเมล.
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);
ส่งข้อความ
นี้ ส่ง เมธอดของ IGraphClient ทำให้คุณสามารถส่งข้อความอีเมลโดยตรงโดยใช้ MapiMessage อ็อบเจกต์ ในตัวอย่างนี้ จะสร้างข้อความอย่างง่าย ตั้งค่ารายละเอียดผู้ส่งและผู้รับ แล้วส่ง
// 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);
ส่งข้อความฉบับร่าง
คุณสามารถบันทึกข้อความไปยังโฟลเดอร์ Drafts และส่งภายหลังโดยใช้ IGraphClient. วิธีการนี้ทำให้คุณเตรียมข้อความ ตรวจสอบหรือแก้ไขก่อนส่ง แล้วค่อยส่งเมื่อพร้อม ตัวอย่างโค้ดต่อไปนี้แสดงวิธีสร้างอีเมล เพิ่มเมตาดาต้า เก็บเป็นฉบับร่าง แล้วส่ง
- สร้าง MapiMessage พร้อมหัวข้อ เนื้อหา และผู้รับ.
- ตั้งค่ารายละเอียดผู้ส่งโดยใช้คุณสมบัติของข้อความ.
- บันทึกข้อความไปยังโฟลเดอร์ Drafts โดยใช้ CreateMessage.
- ส่งฉบับร่างโดยส่ง ItemId ของมันไปยัง Send() เมธอด.
// 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);
ส่งข้อความ EML
ใช้ MailMessage คลาสเพื่อสร้างและส่งข้อความในรูปแบบ EML ตัวอย่างโค้ดต่อไปนี้แสดงวิธีสร้างและส่งข้อความอีเมลโดยใช้ 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);
คัดลอกข้อความ
เพื่อสร้างสำเนาของข้อความอีเมลที่มีอยู่ ใช้ คัดลอกข้อความ เมธอดของ IGraphClient อินเทอร์เฟซ
// copy message to Inbox folder
var copiedMsg = client.CopyMessage(KnownFolders.Inbox, msg.ItemId);
ย้ายข้อความ
เพื่อย้ายข้อความอีเมลที่มีอยู่จากตำแหน่งปัจจุบันไปยังโฟลเดอร์ใหม่ ใช้ MoveMessage เมธอดของ IGraphClient อินเทอร์เฟซ
// move message to Inbox folder
var movedMsg = client.MoveMessage(KnownFolders.Inbox, msg.ItemId);
จัดการไฟล์แนบ
นี้ IGraphClient ใน Aspose.Email สำหรับ .NET ทำให้คุณสามารถทำงานกับไฟล์แนบของอีเมลได้แบบโปรแกรมมิ่ง ซึ่งรวมถึงการสร้าง การดึงข้อมูล การลบ และการแสดงรายการไฟล์แนบที่เชื่อมโยงกับข้อความ ตัวอย่างโค้ดต่อไปนี้แสดงการจัดการวงจรชีวิตไฟล์แนบอย่างครบถ้วนสำหรับข้อความ Outlook ผ่าน Microsoft Graph API โดยใช้ Aspose.Email คุณสามารถปรับแต่งเนื้อหาและเมตาดาต้าของไฟล์แนบตามต้องการ.
// 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);