การแยกแยะระหว่างไฟล์แนบแบบ Inline และแบบปกติ
เป็นสถานการณ์ทั่วไปที่ข้อความอีเมลอาจมีภาพ inline อยู่ในเนื้อหาและไฟล์แนบแบบปกติที่เกี่ยวข้อง การใช้ MailMessage คลาส, ไฟล์แนบแบบ inline สามารถดึงออกจาก LinkedResourceCollection คลาส, ในขณะที่ไฟล์แนบแบบปกติสามารถเข้าถึง/ดึงออกได้ด้วย AttachmentCollection คลาสของข้อความ อย่างไรก็ตาม สิ่งนี้จะแตกต่างเมื่อข้อความถูกโหลดด้วยคลาส Aspose.Email.Mapi.MapiMessage เนื่องจากภาพ inline และไฟล์แนบแบบปกติทั้งหมดสามารถเข้าถึงได้ในคลาส MapiAttachmentCollection เดียวกัน ดังนั้นจึงต้องพัฒนาเมธอดที่สามารถแยกแยะระหว่างไฟล์แนบแบบ inline และแบบปกติเมื่อใช้ MapiMessage
การใช้ Aspose.Email เพื่อแยกแยะไฟล์แนบแบบ Inline และแบบปกติ
บทความนี้อธิบายวิธีการแยกแยะไฟล์แนบแบบ inline จากไฟล์แนบแบบปกติโดยใช้ MapiMessage เพื่อกำหนดการแยกแยะนี้ จะพิจารณาประเภทของเนื้อหาใน MapiMessage ตามด้านล่าง:
Plain Text Body: ข้อความอีเมลที่มีประเภทเนื้อหาเป็น plain text ไม่จำเป็นต้องตรวจสอบ เนื่องจากไฟล์แนบทั้งหมดในข้อความดังกล่าวจะเป็นไฟล์แนบแบบปกติเสมอ
Html Body: ในกรณีที่ข้อความมีประเภทเนื้อหา HTML ไฟล์แนบควรมีคุณสมบัติ PR_ATTACH_FLAGS (0x37140003) และค่าของมันควรเท่ากับ 0x00000004 สำหรับไฟล์แนบแบบ inline หากเงื่อนไขนี้เป็นจริง จะพิจารณาตามแท็ก PR_ATTACH_CONTENT_LOCATION และ PR_ATTACH_CONTENT_ID เพื่อกำหนดลักษณะของไฟล์แนบ อย่างไรก็ตาม หากไม่มีแท็ก PR_ATTACH_FLAGS ของ Mapi ไฟล์แนบจะตรวจสอบคุณสมบัติ PR_ATTACH_DISPOSITION (0x3716001F หรือ 0x3716001E) เพื่อกำหนดประเภทไฟล์แนบ
Rtf Body: หากเนื้อหาเป็น RTF แล้วไฟล์แนบ OLE ทั้งหมดจะเป็นไฟล์แนบแบบ inline ค่า PR_ATTACH_METHOD สำหรับไฟล์แนบ OLE ทั้งหมดคือ 0x00000006.
ตัวอย่างโค้ดต่อไปนี้แสดงการแยกแยะระหว่างไฟล์แนบแบบ inline และแบบปกติโดยโปรแกรม ฟังก์ชัน IsInlineAttachment รับไฟล์แนบและประเภทของเนื้อความข้อความเป็นพารามิเตอร์เข้ามา และคืนค่า true หากไฟล์แนบเป็นแบบ Inline