การดำเนินการอีเมลแบบอะซิงค์กับการตรวจสอบสิทธิ์ 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 โค้ดทำตามขั้นตอนต่อไปนี้:

  1. สร้างใหม่ CancellationToken อ็อบเจ็กต์ที่สามารถใช้ยกเลิกการทำงานแบบอะซิงโครนัสได้
  2. สร้างอินสแตนซ์ SomeAsyncTokenProvider คลาสที่ทำการใช้งาน IAsyncTokenProvider อินเทอร์เฟซ คลาสนี้ใช้เป็นพารามิเตอร์สำหรับสร้างใหม่ OAuthNetworkCredential อ็อบเจ็กต์.
  3. ตั้งค่า URI ของกล่องจดหมายไปยังจุดสิ้นสุดของ Exchange Web Services.
  4. เรียก GetEwsClientAsync เมธอดของ EWSClient คลาสที่มี mailboxUri และ OAuthNetworkCredential วัตถุเป็นพารามิเตอร์ วิธีนี้คืนอ็อบเจ็กต์ Task ดังนั้นจึงรอผลลัพธ์ก่อนดำเนินต่อไป The cancellationToken ออบเจกต์ถูกส่งเป็นพารามิเตอร์เลือกให้กับ 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);

ส่งข้อความอีเมล

ตัวอย่างโค้ดด้านล่างกำลังพยายามส่งข้อความอีเมลแบบอะซิงโครนัส โค้ดทำตามขั้นตอนต่อไปนี้:

  1. สร้างใหม่ MailMessage ออบเจกต์ที่มีพารามิเตอร์ของข้อความ.
  2. เรียก 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);

ดึงข้อความอีเมล

เพื่อดึงข้อความอีเมลแบบอะซิงค์ ใช้ตัวอย่างโค้ดต่อไปนี้พร้อมขั้นตอนที่อธิบายด้านล่าง:

  1. เรียกใช้ FetchItemAsync method ของ EWSclient. method รับพารามิเตอร์สองตัว:

    • messageUri เป็นสตริงที่แทน URI ของข้อความที่จะดึง
    • cancellationToken เป็นพารามิเตอร์เลือกที่สามารถใช้เพื่อยกเลิกการดำเนินการแบบอะซิงค์ method ส่งคืนอ็อบเจกต์ Task ที่ให้ผลลัพธ์เป็น MapiMessage ออบเจกต์เมื่อการดำเนินการแบบอะซิงค์เสร็จ คำสำคัญ "await" ถูกใช้เพื่อรอให้ Task เสร็จสมบูรณ์ก่อนทำต่อ
  2. กำหนดให้กับ fetched ตัวแปรได้รับผลลัพธ์จาก Task ที่เสร็จสมบูรณ์ ซึ่งเป็น MapiMessage ออบเจกต์ที่บรรจุข้อมูลข้อความที่ดึงมา

       var fetched = await ewsClient.FetchItemAsync(messageUri, cancellationToken: cancellationToken);
    

เพิ่มข้อความอีเมล

ตัวอย่างโค้ดด้านล่างพยายามเพิ่มข้อความอีเมลแบบอะซิงค์ โค้ดทำตามขั้นตอนต่อไปนี้:

  1. เรียก AppendMessagesAsync method ของ EWSclient ออบเจกต์. method รับ EwsAppendMessage ออบเจกต์ที่บรรจุปารามิเตอร์: ข้อความที่จะเพิ่ม, URI ของโฟลเดอร์เป้าหมาย, และ cancellation token.

  2. สร้าง EwsAppendMessage อ็อบเจ็กต์โดยใช้ สร้าง method และกำหนดค่าด้วยการเรียก method ต่อไปนี้:

    • AddMessage เพิ่มข้อความลงในการดำเนินการเพิ่ม
    • SetFolder ตั้งค่า URI ของโฟลเดอร์เป้าหมายสำหรับการเพิ่ม
    • SetCancellationToken ตั้งค่า cancellation token ที่สามารถใช้เพื่อยกเลิกการดำเนินการแบบอะซิงค์
  3. นี้ AppendMessagesAsync method ส่งคืนอ็อบเจกต์ Task ที่ให้ผลลัพธ์เป็นอ็อบเจกต์ IEnumerable เมื่อการดำเนินการแบบอะซิงค์เสร็จ คำสำคัญ "await" ถูกใช้เพื่อรอให้ Task เสร็จสมบูรณ์ก่อนทำต่อ

  4. นี้ uris ตัวแปรได้รับค่าจาก Task ที่เสร็จสมบูรณ์ ซึ่งเป็นอ็อบเจกต์ IEnumerable ที่มี URI ของข้อความที่เพิ่ม

IEnumerable<string> uris = await ewsClient.AppendMessagesAsync(
    EwsAppendMessage.Create()
        .AddMessage(message)
        .AddMessage(fetched)
        .SetFolder(folderUri)
        .SetCancellationToken(cancellationToken));

คัดลอกรายการ

ตัวอย่างโค้ดด้านล่างแสดงวิธีคัดลอกรายการและทำตามขั้นตอนต่อไปนี้:

  1. เรียก CopyItemAsync method ของ EWSClient ออบเจกต์. method รับพารามิเตอร์สามตัว:

    • messageUri เป็นสตริงที่แทน URI ของข้อความที่จะคัดลอก
    • destinationFolderUri เป็นสตริงที่แทน URI ของโฟลเดอร์ปลายทาง
    • cancellationToken เป็นพารามิเตอร์เลือกที่สามารถใช้เพื่อยกเลิกการดำเนินการแบบอะซิงค์.

    method ส่งคืนอ็อบเจกต์ Task ที่ให้ผลลัพธ์เป็นสตริงเมื่อการดำเนินการแบบอะซิงค์เสร็จ คำสำคัญ "await" ถูกใช้เพื่อรอให้ Task เสร็จสมบูรณ์ก่อนทำต่อ

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

อัปเดตรายการ

ตัวอย่างโค้ดด้านล่างพยายามอัปเดตรายการแบบอะซิงค์ มันทำตามขั้นตอนต่อไปนี้:

  1. สร้าง EwsUpdateItem อ็อบเจ็กต์โดยใช้ สร้าง method, ส่งผ่านออบเจกต์รายการ. EwsUpdateItem แสดงพารามิเตอร์ของการอัปเดต. The SetCancellationToken method ถูกเรียกบน EwsUpdateItem ออบเจกต์, ส่งผ่านใน cancellationToken พารามิเตอร์ ซึ่งเป็นพารามิเตอร์เลือกที่สามารถใช้เพื่อยกเลิกการดำเนินการแบบอะซิงค์
  2. ส่งผ่าน EwsUpdateItem ออบเจกต์เป็นพารามิเตอร์สำหรับ UpdateItemAsync method ของ EWSClient.
  3. นี้ UpdateItemAsync method ส่งคืนอ็อบเจกต์ Task ที่เสร็จสมบูรณ์เมื่อการดำเนินการแบบอะซิงค์เสร็จ คำสำคัญ "await" ถูกใช้เพื่อรอให้ Task เสร็จสมบูรณ์ก่อนทำต่อ
await ewsClient.UpdateItemAsync(
    EwsUpdateItem.Create(mapiNote)
        .SetCancellationToken(cancellationToken));