Working with Messages from Server

รับข้อมูลกล่องจดหมาย

เราสามารถรับข้อมูลเกี่ยวกับกล่องจดหมาย เช่น จำนวนข้อความและขนาดกล่องจดหมายโดยใช้เมธอด GetMailBoxSize() และ GetMailBoxInfo()

  • เมธอด GetMailBoxSize() คืนค่าขนาดของกล่องจดหมายเป็นไบต์.
  • เมธอด GetMailBoxInfo() คืนค่าอ็อบเจกต์ประเภท Pop3MailBoxInfo.

นอกจากนี้ยังสามารถรับจำนวนข้อความโดยใช้คุณสมบัติ MessageCount และขนาดโดยใช้คุณสมบัติ OccupiedSize ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการรับข้อมูลเกี่ยวกับกล่องจดหมาย แสดงวิธีการ:

  1. สร้าง Pop3Client.
  2. เชื่อมต่อกับเซิร์ฟเวอร์ POP3
  3. รับขนาดของกล่องจดหมาย
  4. รับข้อมูลกล่องจดหมาย
  5. รับจำนวนข้อความในกล่องจดหมาย
  6. รับขนาดที่ใช้

การรับจำนวนอีเมลในกล่องจดหมาย

โค้ดสแนปต่อไปนี้แสดงวิธีนับจำนวนข้อความอีเมลในกล่องจดหมาย

Aspose.Email ให้ผู้พัฒนาสามารถทำงานกับอีเมลได้หลายวิธี ตัวอย่างเช่น พวกเขาสามารถดึงข้อมูลส่วนหัวก่อนตัดสินใจดาวน์โหลดอีเมล หรือสามารถดึงอีเมลจากเซิร์ฟเวอร์และบันทึกโดยไม่ต้องแปลง (เร็วกว่า) หรือหลังจากแปลงแล้ว (ช้ากว่า) บทความนี้แสดงวิธีดึงและแปลงอีเมล

ดึงข้อมูลส่วนหัวอีเมล

ส่วนหัวของอีเมลสามารถให้ข้อมูลเกี่ยวกับข้อความอีเมลที่เราสามารถใช้ตัดสินใจว่าจะดึงข้อความทั้งหมดหรือไม่ โดยทั่วไปข้อมูลส่วนหัวจะมีผู้ส่ง, หัวเรื่อง, วันที่รับ เป็นต้น (ส่วนหัวของอีเมลอธิบายรายละเอียดในหัวข้อ Customizing Email Headers หัวข้อนี้เกี่ยวกับการส่งอีเมลด้วย SMTP แต่ข้อมูลส่วนหัวของอีเมลยังคงใช้ได้กับอีเมล POP3) ตัวอย่างต่อไปนี้แสดงวิธีดึงส่วนหัวของอีเมลจากเซิร์ฟเวอร์ POP3 โดยใช้หมายเลขลำดับของข้อความ

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

คอมโพเนนต์คลาส Aspose.Email.Pop3 ให้ความสามารถในการดึงข้อความอีเมลจากเซิร์ฟเวอร์ POP3 และแปลงเป็นอินสแตนซ์ MailMessage ด้วยความช่วยเหลือของคอมโพเนนต์ MailMessage คลาส MailMessage มีคุณสมบัติและเมธอดหลายอย่างสำหรับจัดการเนื้อหาอีเมล โดยการใช้ฟังก์ชัน FetchMessage ของคลาส Pop3Client คุณสามารถรับอินสแตนซ์ MailMessage โดยตรงจากเซิร์ฟเวอร์ POP3 ตัวอย่างโค้ดต่อไปนี้แสดงวิธีดึงข้อความอีเมลครบชุดจากเซิร์ฟเวอร์ POP3

Retrieving Message Summary Information using Unique Id

คลายเอนท์ POP3 Client ของ API สามารถดึงข้อมูลสรุปของข้อความจากเซิร์ฟเวอร์โดยใช้ ID ที่เป็นเอกลักษณ์ของข้อความ ซึ่งทำให้เข้าถึงข้อมูลสั้นของข้อความได้อย่างรวดเร็วโดยไม่ต้องดึงข้อความเต็มจากเซิร์ฟเวอร์ก่อน ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการดึงข้อมูลสรุปของข้อความ

Listing Messages with MultiConnection

สำหรับการทำงานที่มีภาระหนัก Aspose.Email มีคุณสมบัติ ‘use_multi_connection’ ของ Pop3Client คลาสเพื่อใช้การเชื่อมต่อหลายช่องขณะดึงอีเมล อย่างไรก็ตาม การใช้โหมดนี้ไม่ได้หมายความว่าจะต้องเพิ่มประสิทธิภาพ ตัวอย่างโค้ดต่อไปนี้แสดงวิธีตั้งค่าการเชื่อมต่อกับเซิร์ฟเวอร์ POP3, กำหนดค่าไคลเอนท์ให้รองรับการเชื่อมต่อพร้อมกันสูงสุด 5 ช่องและเปิดใช้โหมดหลายช่องเพื่อดึงข้อมูลเกี่ยวกับข้อความที่อยู่บนเซิร์ฟเวอร์:

import aspose.email as ae

client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)

client.connections_quantity = 5
client.use_multi_connection = ae.clients.MultiConnectionMode.ENABLE
message_info_coll = client.list_messages()

ดึงข้อความจากเซิร์ฟเวอร์และบันทึกลงดิสก์

บันทึกข้อความลงดิสก์โดยไม่แปลง

หากต้องการดาวน์โหลดข้อความอีเมลจากเซิร์ฟเวอร์ POP3 โดยไม่ทำการแปลง ใช้ฟังก์ชัน SaveMessage ของคลาส Pop3Client ฟังก์ชัน SaveMessage จะไม่ทำการแปลงข้อความอีเมลจึงเร็วกว่าเมธอด FetchMessage ตัวอย่างโค้ดต่อไปนี้แสดงวิธีบันทึกข้อความตามหมายเลขลำดับ ในกรณีนี้คือหมายเลข 1 วิธี SaveMessage จะบันทึกข้อความในรูปแบบ EML ดั้งเดิมโดยไม่ทำการแปลง

แปลงข้อความก่อนบันทึก

ใช้เมธอด ‘fetch_message’ ของอ็อบเจกต์คลไคลเอนท์ที่สร้างขึ้นโดยใช้ Pop3Client คลาสเพื่อดึงข้อความที่มีหมายเลขลำดับเฉพาะ ตัวอย่างโค้ดด้านล่างแสดงวิธีดึงข้อความที่ระบุและบันทึกโดยใช้หัวเรื่องเป็นชื่อไฟล์โดยเรียกเมธอด ‘save’ ของอ็อบเจกต์ msg:

import aspose.email as ae

client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)

# Fetch the message by its sequence number and Save the message using its subject as the file name
msg = client.fetch_message(1)
msg.save("first-message_out.eml", ae.SaveOptions.default_eml)

การกรองข้อความตามผู้ส่ง, ผู้รับ หรือวันที่

คลาส Pop3Client ซึ่งอธิบายไว้ในหัวข้อ Connecting to a POP3 Server มีเมธอด list_messages() ที่ดึงข้อความทั้งหมดจากกล่องจดหมาย เพื่อรับเฉพาะข้อความที่ตรงตามเงื่อนไขบางอย่าง ให้ใช้เมธอด ListMessages() ที่มีการอับโหลดและรับอากิวเมนต์เป็น MailQuery คลาส MailQuery มีคุณสมบัติต่าง ๆ สำหรับระบุเงื่อนไขการค้นหา เช่น วันที่, หัวเรื่อง, ผู้ส่ง, ผู้รับ ฯลฯ คลาส MailQueryBuilder ใช้เพื่อสร้างนิพจน์การค้นหา โดยตั้งค่าเงื่อนไขและข้อจำกัดทั้งหมดแล้วเติมค่าให้ MailQuery ด้วยคิวรีที่สร้างโดย MailQueryBuilder อ็อบเจกต์ของคลาส MailQuery จะถูกใช้โดย Pop3Client เพื่อสกัดข้อมูลที่กรองจากเซิร์ฟเวอร์ บทความนี้แสดงวิธีกรองข้อความอีเมลจากกล่องจดหมาย ตัวอย่างแรกอธิบายการกรองข้อความตามวันที่และหัวเรื่อง เราแสดงวิธีกรองตามเกณฑ์อื่น ๆ และวิธีสร้างคิวรีที่ซับซ้อนยิ่งขึ้น นอกจากนี้ยังแสดงการใช้ฟิลเตอร์วันที่และเวลาเพื่อดึงอีเมลเฉพาะจากกล่องจดหมาย และแสดงวิธีการกรองที่แยกแยะตัวพิมพ์ใหญ่‑เล็ก

การกรองข้อความจากกล่องจดหมาย

เพื่อกรองข้อความจากกล่องจดหมาย:

  1. เชื่อมต่อและเข้าสู่ระบบกับเซิร์ฟเวอร์ POP3
  2. สร้างอินสแตนซ์ของ MailQuery และตั้งค่าคุณสมบัติที่ต้องการ.
  3. เรียกเมธอด Pop3Client.list_messages(MailQuery query) และส่ง MailQuery เป็นพารามิเตอร์เพื่อรับเฉพาะข้อความที่ผ่านการกรอง

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเชื่อมต่อกับกล่องจดหมาย POP3 และรับข้อความที่มาถึงในวันนี้และมีคำ "newsletter" อยู่ในหัวเรื่อง

ดึงข้อความที่ตรงตามเกณฑ์เฉพาะ

Aspose.Email ยังทำให้สามารถสร้างเงื่อนไขการค้นหาที่ซับซ้อนสำหรับการสอบถามและกรองข้อความอีเมล เพื่อวัตถุประสงค์นี้ใช้ MailQueryBuilder คลาสและคุณสมบัติของมัน เกณฑ์การดึงข้อมูลดังต่อไปนี้:

  • ดึงข้อความตามวันที่จัดส่ง
  • ดึงข้อความในช่วง
  • ดึงข้อความจากผู้ส่งเฉพาะ
  • ดึงข้อความจากโดเมนเฉพาะ
  • ดึงข้อความไปยังผู้รับเฉพาะ

วันที่วันนี้

เพื่อดึงข้อความตามวันที่จัดส่ง ใช้คุณสมบัติ ‘internal_date’ ตามตัวอย่างโค้ดด้านล่าง:

import aspose.email as ae
from datetime import datetime

builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.on(datetime.now())

ช่วงวันที่

เพื่อดึงข้อความในช่วงวันที่ ใช้คุณสมบัติ ‘internal_date’ เดียวกันและระบุช่วงวันที่ตามตัวอย่างโค้ดด้านล่าง:

import aspose.email as ae
from datetime import datetime, timedelta

builder = ae.tools.search.MailQueryBuilder()
# Emails that arrived in last 7 days
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))

ผู้ส่งเฉพาะ

เพื่อดึงข้อความจากผู้ส่งเฉพาะ ใช้คุณสมบัติ ‘from_address’ ตามตัวอย่างโค้ดด้านล่าง:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("saqib.razzaq@127.0.0.1")

โดเมนเฉพาะ

เพื่อดึงข้อความจากโดเมนเฉพาะ ใช้คุณสมบัติ ‘from_address’ ตามตัวอย่างโค้ดด้านล่าง:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("SpecificHost.com")

ผู้รับเฉพาะ

เพื่อดึงข้อความไปยังผู้รับเฉพาะ ใช้คุณสมบัติ ’to’ ตามตัวอย่างโค้ดด้านล่าง:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.to.contains("recipient")

การสร้างคิวรีซับซ้อน

บางครั้งจำเป็นต้องทำให้หลายคิวรีสำเร็จ Aspose.Email ทำให้เป็นไปได้โดยการรวมคิวรีในหลายคำสั่ง สร้าง MailQueryBuilder อ็อบเจกต์และใช้คุณสมบัติของมันเพื่อสร้างคิวรีเฉพาะ

การรวมคิวรีด้วย AND

โค้ดสแนปต่อไปนี้แสดงวิธีรวมคิวรีด้วย AND

import aspose.email as ae
from datetime import datetime, timedelta

builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))
builder.from_address.contains("SpecificHost.com")

การรวมคิวรีด้วย OR

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีรวมคิวรีด้วย OR

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))

การใช้ตัวกรองที่คำนึงถึงตัวพิมพ์ใหญ่-เล็ก

API ยังให้ความสามารถในการกรองอีเมลจากกล่องจดหมายตามเกณฑ์ที่แยกแยะตัวพิมพ์ใหญ่‑เล็ก วิธีต่อไปนี้ของ StringComparisonField คลาสให้ความสามารถในการค้นหาอีเมลโดยระบุแฟลกแยกแยะตัวพิมพ์ใหญ่‑เล็ก

Method Aspose.Email.StringComparisonField.contains(value, ignore_case) Method Aspose.Email.StringComparisonField.equals(value, ignore_case) Method Aspose.Email.StringComparisonField.not_contains(value, ignore_case) Method Aspose.Email.StringComparisonField.not_equals(value, ignore_case)

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีนำความสามารถนี้ไปใช้ในโครงการของคุณ:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)