การดำเนินการอีเมลแบบอะซิงค์กับการตรวจสอบสิทธิ์ OAuth & ไคลเอนต์ EWS
เมธอด Async เพื่อดึง OAuth Token
แตกต่างจากเมธอดแบบซิงโครนัส เมธอดแบบอะซิงโครนัสไม่บล็อกและอนุญาตให้ทำหลายคำขอพร้อมกัน เมธอดอะซิงโครนัสจะมีชื่อที่ลงท้ายด้วย Async.
หมายเหตุ: เมธอด Async มีให้ใช้ในเวอร์ชันที่รองรับ .NET Core, .NET Framework 4.5 และรุ่นต่อ ๆ ไป.
ตัวอย่างโค้ดต่อไปนี้กำหนด SomeAsyncTokenProvider คลาส ซึ่งทำการ implements the IAsyncTokenProvider อินเทอร์เฟซ คลาสนี้ทำการ implements GetAccessTokenAsync เมธอดแบบอะซิงโครนัสที่คืนค่าเป็น Task ชนิด OAuthToken เมธอดนี้ดึง OAuthToken ที่ถูกต้อง OAuthToken อย่างอะซิงโครนัส.
private class SomeAsyncTokenProvider : IAsyncTokenProvider
{
public SomeAsyncTokenProvider( /*some parameters*/)
{
...
}
public async Task<OAuthToken> GetAccessTokenAsync(bool ignoreExistingToken = false,
CancellationToken cancellationToken = default)
{
//Some asynchronous code to get a valid OAuthToken
...
}
public void Dispose()
{
...
}
}
การตั้งค่าไคลเอนต์ EWS แบบอะซิงโครนัสด้วยการรับรอง OAuth
ตัวอย่างโค้ดต่อไปนี้ดึงคล라이언ท์ Exchange Web Services (EWS) อย่างอะซิงโครนัสโดยใช้การรับรองความจริงแบบ OAuth โค้ดทำตามขั้นตอนต่อไปนี้:
- สร้างใหม่ CancellationToken อ็อบเจ็กต์ที่สามารถใช้ยกเลิกการทำงานแบบอะซิงโครนัสได้
- สร้างอินสแตนซ์
SomeAsyncTokenProviderคลาสที่ทำการใช้งาน IAsyncTokenProvider อินเทอร์เฟซ คลาสนี้ใช้เป็นพารามิเตอร์สำหรับสร้างใหม่ OAuthNetworkCredential อ็อบเจ็กต์. - ตั้งค่า URI ของกล่องจดหมายไปยังจุดสิ้นสุดของ Exchange Web Services.
- เรียก GetEwsClientAsync เมธอดของ EWSClient คลาสที่มี
mailboxUriและOAuthNetworkCredentialวัตถุเป็นพารามิเตอร์ วิธีนี้คืนอ็อบเจ็กต์ Task ดังนั้นจึงรอผลลัพธ์ก่อนดำเนินต่อไป ThecancellationTokenออบเจกต์ถูกส่งเป็นพารามิเตอร์เลือกให้กับ GetEwsClientAsync เมธอด.
//The cancellationToken can be used
var cancellationToken = new CancellationToken();
//Create IAsyncEwsClientInstance
IAsyncTokenProvider tokenProvider = new SomeAsyncTokenProvider(/*some parameters*/);
const string mailboxUri = "https://outlook.office365.com/ews/exchange.asmx";
var ewsClient = await EWSClient.GetEwsClientAsync(mailboxUri, new OAuthNetworkCredential(tokenProvider),
cancellationToken: cancellationToken);
ส่งข้อความอีเมล
ตัวอย่างโค้ดด้านล่างกำลังพยายามส่งข้อความอีเมลแบบอะซิงโครนัส โค้ดทำตามขั้นตอนต่อไปนี้:
- สร้างใหม่ MailMessage ออบเจกต์ที่มีพารามิเตอร์ของข้อความ.
- เรียก SendAsync เมธอดของ EWSClient ออบเจกต์, ส่งผ่าน MailMessage เป็นพารามิเตอร์. Method ถูก await เนื่องจากคืนค่าเป็นอ็อบเจกต์ Task. The
cancellationTokenออบเจกต์ถูกส่งเป็นพารามิเตอร์เลือกให้กับ SendAsync เมธอด.
MailMessage message = new MailMessage("from@aspose.com", "to@aspose.com", "Some subject", "Some body");
await ewsClient.SendAsync(message, cancellationToken: cancellationToken);
ดึงข้อความอีเมล
เพื่อดึงข้อความอีเมลแบบอะซิงค์ ใช้ตัวอย่างโค้ดต่อไปนี้พร้อมขั้นตอนที่อธิบายด้านล่าง:
-
เรียกใช้ FetchItemAsync method ของ EWSclient. method รับพารามิเตอร์สองตัว:
messageUriเป็นสตริงที่แทน URI ของข้อความที่จะดึงcancellationTokenเป็นพารามิเตอร์เลือกที่สามารถใช้เพื่อยกเลิกการดำเนินการแบบอะซิงค์ method ส่งคืนอ็อบเจกต์ Task ที่ให้ผลลัพธ์เป็น MapiMessage ออบเจกต์เมื่อการดำเนินการแบบอะซิงค์เสร็จ คำสำคัญ "await" ถูกใช้เพื่อรอให้ Task เสร็จสมบูรณ์ก่อนทำต่อ
-
กำหนดให้กับ
fetchedตัวแปรได้รับผลลัพธ์จาก Task ที่เสร็จสมบูรณ์ ซึ่งเป็น MapiMessage ออบเจกต์ที่บรรจุข้อมูลข้อความที่ดึงมาvar fetched = await ewsClient.FetchItemAsync(messageUri, cancellationToken: cancellationToken);
เพิ่มข้อความอีเมล
ตัวอย่างโค้ดด้านล่างพยายามเพิ่มข้อความอีเมลแบบอะซิงค์ โค้ดทำตามขั้นตอนต่อไปนี้:
-
เรียก AppendMessagesAsync method ของ EWSclient ออบเจกต์. method รับ EwsAppendMessage ออบเจกต์ที่บรรจุปารามิเตอร์: ข้อความที่จะเพิ่ม, URI ของโฟลเดอร์เป้าหมาย, และ cancellation token.
-
สร้าง EwsAppendMessage อ็อบเจ็กต์โดยใช้ สร้าง method และกำหนดค่าด้วยการเรียก method ต่อไปนี้:
- AddMessage เพิ่มข้อความลงในการดำเนินการเพิ่ม
- SetFolder ตั้งค่า URI ของโฟลเดอร์เป้าหมายสำหรับการเพิ่ม
- SetCancellationToken ตั้งค่า cancellation token ที่สามารถใช้เพื่อยกเลิกการดำเนินการแบบอะซิงค์
-
นี้ AppendMessagesAsync method ส่งคืนอ็อบเจกต์ Task ที่ให้ผลลัพธ์เป็นอ็อบเจกต์ IEnumerable
เมื่อการดำเนินการแบบอะซิงค์เสร็จ คำสำคัญ "await" ถูกใช้เพื่อรอให้ Task เสร็จสมบูรณ์ก่อนทำต่อ -
นี้
urisตัวแปรได้รับค่าจาก Task ที่เสร็จสมบูรณ์ ซึ่งเป็นอ็อบเจกต์ IEnumerableที่มี URI ของข้อความที่เพิ่ม
IEnumerable<string> uris = await ewsClient.AppendMessagesAsync(
EwsAppendMessage.Create()
.AddMessage(message)
.AddMessage(fetched)
.SetFolder(folderUri)
.SetCancellationToken(cancellationToken));
คัดลอกรายการ
ตัวอย่างโค้ดด้านล่างแสดงวิธีคัดลอกรายการและทำตามขั้นตอนต่อไปนี้:
-
เรียก CopyItemAsync method ของ EWSClient ออบเจกต์. method รับพารามิเตอร์สามตัว:
messageUriเป็นสตริงที่แทน URI ของข้อความที่จะคัดลอกdestinationFolderUriเป็นสตริงที่แทน URI ของโฟลเดอร์ปลายทางcancellationTokenเป็นพารามิเตอร์เลือกที่สามารถใช้เพื่อยกเลิกการดำเนินการแบบอะซิงค์.
method ส่งคืนอ็อบเจกต์ Task ที่ให้ผลลัพธ์เป็นสตริงเมื่อการดำเนินการแบบอะซิงค์เสร็จ คำสำคัญ "await" ถูกใช้เพื่อรอให้ Task เสร็จสมบูรณ์ก่อนทำต่อ
-
newItemUriตัวแปรได้รับค่าจาก Task ที่เสร็จสมบูรณ์ ซึ่งเป็นสตริงที่มี URI ของสำเนาข้อความที่สร้างใหม่
string newItemUri = await ewsClient.CopyItemAsync(messageUri, destinationFolderUri, cancellationToken);
ลบรายการ
โค้ดต่อไปนี้พยายามลบข้อความอีเมลแบบอะซิงค์.
มันเรียก DeleteItemAsync method ของอ็อบเจกต์ EWSClient. method รับพารามิเตอร์สามตัว:
newItemUriเป็นสตริงที่แทน URI ของรายการที่จะลบDeletionOptions.DeletePermanentlyระบุว่ารายการควรจะถูกลบอย่างถาวรcancellationTokenเป็นพารามิเตอร์เลือกที่สามารถใช้เพื่อยกเลิกการดำเนินการแบบอะซิงค์.
method ส่งคืนอ็อบเจกต์ Task ที่เสร็จสมบูรณ์เมื่อการดำเนินการแบบอะซิงค์เสร็จ คำสำคัญ "await" ถูกใช้เพื่อรอให้ Task เสร็จสมบูรณ์ก่อนทำต่อ
await ewsClient.DeleteItemAsync(newItemUri, DeletionOptions.DeletePermanently, cancellationToken);
ลบโฟลเดอร์
โค้ดต่อไปนี้พยายามลบโฟลเดอร์แบบอะซิงค์.
มันเรียก DeleteFolderAsync method ของอ็อบเจกต์ EWSClient. method รับพารามิเตอร์สามตัว:
folderUriเป็นสตริงที่แทน URI ของโฟลเดอร์ที่จะลบdeletePermanentlyระบุว่าจะลบโฟลเดอร์อย่างถาวรหรือย้ายไปยังโฟลเดอร์ "Deleted Items"cancellationTokenเป็นพารามิเตอร์เลือกที่สามารถใช้เพื่อยกเลิกการดำเนินการแบบอะซิงค์.
method ส่งคืนอ็อบเจกต์ Task ที่เสร็จสมบูรณ์เมื่อการดำเนินการแบบอะซิงค์เสร็จ คำสำคัญ "await" ถูกใช้เพื่อรอให้ Task เสร็จสมบูรณ์ก่อนทำต่อ
const bool deletePermanently = true;
await ewsClient.DeleteFolderAsync(folderUri, deletePermanently, cancellationToken);
อัปเดตรายการ
ตัวอย่างโค้ดด้านล่างพยายามอัปเดตรายการแบบอะซิงค์ มันทำตามขั้นตอนต่อไปนี้:
- สร้าง EwsUpdateItem อ็อบเจ็กต์โดยใช้ สร้าง method, ส่งผ่านออบเจกต์รายการ. EwsUpdateItem แสดงพารามิเตอร์ของการอัปเดต. The SetCancellationToken method ถูกเรียกบน EwsUpdateItem ออบเจกต์, ส่งผ่านใน
cancellationTokenพารามิเตอร์ ซึ่งเป็นพารามิเตอร์เลือกที่สามารถใช้เพื่อยกเลิกการดำเนินการแบบอะซิงค์ - ส่งผ่าน EwsUpdateItem ออบเจกต์เป็นพารามิเตอร์สำหรับ UpdateItemAsync method ของ EWSClient.
- นี้ UpdateItemAsync method ส่งคืนอ็อบเจกต์ Task ที่เสร็จสมบูรณ์เมื่อการดำเนินการแบบอะซิงค์เสร็จ คำสำคัญ "await" ถูกใช้เพื่อรอให้ Task เสร็จสมบูรณ์ก่อนทำต่อ
await ewsClient.UpdateItemAsync(
EwsUpdateItem.Create(mapiNote)
.SetCancellationToken(cancellationToken));