เชื่อมต่อกับเซิร์ฟเวอร์ IMAP ใน Python

Aspose.Email สำหรับ Python ผ่าน .NET มีส่วนรวมของ ImapClient คลาสที่อนุญาตให้นักพัฒนาเชื่อมต่อกับเซิร์ฟเวอร์เมลโดยใช้ IMAP (Internet Message Access Protocol) คลาสนี้ทำให้การจัดการอีเมลอย่างปลอดภัยและมีประสิทธิภาพในแอปพลิเคชัน Python รวมถึงการดึง, อ่าน, ย้าย, ลบและอัพเดตข้อความอีเมล

โดยใช้ไคลเอนต์ IMAP คุณสามารถยืนยันตัวผู้ใช้ จัดการโฟลเดอร์กล่องจดหมาย เชื่อมต่อผ่าน SSL ตั้งค่า timeout ที่กำหนดเอง และเข้าถึงบัญชีอีเมลผ่านเซิร์ฟเวอร์พร็อกซี่หรือการตรวจสอบสิทธิ์ CRAM-MD5

การเชื่อมต่อ IMAP พื้นฐาน

เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ IMAP ด้วย Aspose.Email ทำตามสามขั้นตอนง่ายต่อไปนี้:

  1. สร้างอินสแตนซ์ของ ImapClient คลาส.
  2. ระบุชื่อโฮสต์, พอร์ต, ชื่อผู้ใช้และรหัสผ่าน
  3. ระบุตัวเลือกความปลอดภัยที่ต้องการ

ตัวอย่างโค้ดด้านล่างแสดงวิธีเชื่อมต่อกับเซิร์ฟเวอร์ IMAP ด้วยโปรแกรม:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")

เปิดใช้ SSL สำหรับการเชื่อมต่อ IMAP

เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ IMAP ที่เปิดใช้งาน SSL ให้ตั้งค่า security_options คุณสมบัติเพื่อ SSLImplicit:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")

# Set the security mode to implicit
client.security_options = ae.clients.SecurityOptions.SSL_EXPLICIT

เชื่อมต่อผ่าน SOCKS Proxy

Aspose.Email รองรับ SOCKS เวอร์ชัน 4, 4a และ 5 สำหรับการเชื่อมต่อผ่านพร็อกซี่ ใช้ขั้นตอนต่อไปนี้เพื่อเชื่อมต่อผ่านพร็อกซี่ SOCKS:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", "username", "password")
client.security_options = ae.clients.SecurityOptions.AUTO

proxy = ae.clients.SocksProxy("192.168.203.142", 1080, ae.clients.SocksVersion.SOCKS_V5)
client.proxy = proxy

client.select_folder("Inbox")

เชื่อมต่อกับเซิร์ฟเวอร์ผ่าน HTTP Proxy

Aspose.Email ยังอนุญาตการเชื่อมต่อ IMAP ผ่านพร็อกซี่ HTTP:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", "username", "password")
client.proxy = ae.clients.HttpProxy("18.222.124.59", 8080)
client.select_folder("Inbox")

การเข้าถึงกล่องจดหมายแบบอ่านอย่างเดียว

เพื่อป้องกันการเปลี่ยนแปลงเนื้อหาในกล่องจดหมาย ให้เปิดโหมดอ่านอย่างเดียว read_only คุณสมบัติที่ตั้งค่าเป็น True แสดงว่าไม่อนุญาตให้ทำการเปลี่ยนแปลง ตัวอย่างโค้ดต่อไปนี้แสดงวิธีใช้คุณสมบัตินี้ในโครงการ:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")
client.security_options = ae.clients.SecurityOptions.SSL_EXPLICIT
client.read_only = True

ใช้การตรวจสอบสิทธิ์ CRAM-MD5

เพื่อความปลอดภัยที่เพิ่มขึ้น ให้กำหนดค่าไคลเอนต์ให้ใช้การตรวจสอบสิทธิ์ CRAM-MD5:

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีกำหนดค่าไคลเอนต์ให้รับ CRAM-MD5 เป็นหนึ่งในวิธีการตรวจสอบสิทธิ์ที่รองรับสำหรับการเชื่อมต่อกับเซิร์ฟเวอร์ IMAP:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")
client.allowed_authentication = ae.clients.imap.ImapKnownAuthenticationType.CRAM_MD5

ตั้งค่า Operation Timeout

ป้องกันไม่ให้ไคลเอนต์รออย่างไม่สิ้นสุดโดยตั้งค่า timeout (เป็นมิลลิวินาที):

โค้ดสแน็ปต่อไปนี้แสดงวิธีตั้งระยะเวลา timeout เป็น 60,000 มิลลิวินาที (60 วินาที) ให้ไคลเอนต์รอการตอบสนองจากเซิร์ฟเวอร์:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)
#  60 seconds
client.timeout = 60000

ตั้งค่า Greeting Timeout

ควบคุมระยะเวลาที่ไคลเอนต์รอระหว่างการจับมือเริ่มต้นกับเซิร์ฟเวอร์เมล

โค้ดสแน็ปต่อไปนี้แสดงวิธีจำกัดเวลา greeting timeout โดยใช้คุณสมบัติ greeting_timeout ของ ImapClient คลาส:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")

client.greeting_timeout = 4000
client.select_folder(ae.clients.imap.ImapFolderInfo.IN_BOX)

ใช้ TLS กับไคลเอนต์ IMAP

Aspose.Email รองรับ TLS และ SSL สำหรับการสื่อสารที่ปลอดภัย ใช้ supported_encryption คุณสมบัติเพื่อกำหนดเวอร์ชันโปรโตคอลที่ยอมรับ

หมายเหตุ: คุณสามารถตั้งค่าเฉพาะเวอร์ชันของโปรโตคอลที่รองรับโดย .NET Framework หากบางเวอร์ชันของโปรโตคอลไม่รองรับโดยเวอร์ชัน .NET Framework ปัจจุบันของคุณ จะถูกละเว้นและข้ามไป ซึ่งอาจทำให้ระดับความปลอดภัยของ TLS ลดลง ในกรณีนี้จะไม่เกิดข้อยกเว้น กรุณาใช้วิธี ‘set_supported_encryption_unsafe(value)’ หากคุณต้องการตั้งค่าโปรโตคอลโดยไม่มีการตรวจสอบความเข้ากันได้

ตัวอย่างโค้ดด้านล่างจะแสดงวิธีตั้งค่า TLS 1.3 สำหรับ ImapClient อินสแตนซ์ของคลาส.

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

client.supported_encryption = ae.clients.base.EncryptionProtocols.TLS13

ในกรณีที่โปรโตคอลการเข้ารหัสที่ระบุไม่รองรับในเวอร์ชันปัจจุบันของ .NET Framework ความแตกต่างของพฤติกรรมระหว่างวิธี set_supported_encryption_unsafe(value) และคุณสมบัติ supported_encryption มีดังนี้:

  • หากใช้คุณสมบัติ supported_encryption ไคลเอนต์อีเมลจะลดระดับโปรโตคอลการเข้ารหัสลงเป็นระดับที่รองรับ
  • หากใช้วิธี set_supported_encryption_unsafe(value) ไคลเอนต์อีเมลจะโยนข้อยกเว้น

ตรวจสอบข้อมูลประจำตัวเซิร์ฟเวอร์ IMAP

เพื่อสร้างการเชื่อมต่อที่ปลอดภัยกับเซิร์ฟเวอร์ IMAP ก่อนดำเนินการต่อไป การตรวจสอบและยืนยันข้อมูลประจำตัวผู้ใช้จะทำโดยวิธี validate_credentials ของ ImapClient คลาสช่วยตรวจสอบว่าชื่อผู้ใช้และรหัสผ่านที่ให้มาถูกต้องหรือไม่ หากข้อมูลรับรองเป็นจริง ไคลเอนต์จะสามารถยืนยันตัวตนกับเซิร์ฟเวอร์ IMAP ได้สำเร็จ ตัวอย่างโค้ดต่อไปนี้แสดงวิธีนำวิธีการนี้ไปใช้ในโครงการของคุณ:

import aspose.email as ae

with ae.clients.imap.ImapClient("your imap server", 993, "your username", "your password", ae.clients.SecurityOptions.AUTO) as client:
    client.timeout = 4000

    if client.validate_credentials():
        # Further actions

เปิดใช้งานการบันทึกกิจกรรม IMAP

การบันทึกกิจกรรมรวมถึงการบันทึกการเชื่อมต่อกับเซิร์ฟเวอร์ รายละเอียดการส่งข้อความที่ส่งและรับ ข้อความแสดงข้อผิดพลาดระหว่างการประมวลผลอีเมล และการกระทำอื่นๆ ที่ทำโดยไคลเอนต์หรือเซิร์ฟเวอร์ เพื่อติดตามกิจกรรมของไคลเอนต์ IMAP และการโต้ตอบกับเซิร์ฟเวอร์ ใช้ตัวอย่างโค้ดต่อไปนี้ที่ใช้คุณสมบัติ log_file_name ของ ImapClient คลาสเพื่อบันทึกข้อมูลไปยังไฟล์ล็อกที่ระบุ:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

# Set the path to the log file using the LogFileName property.
client.log_file_name = "C:\\Aspose.Email.IMAP.log"
# Set the UseDateInLogFileName property if it is necessary.
client.use_date_in_log_file_name = False