تفکیک ضمیمه‌های داخلی (Inline) و معمولی

این یک سناریوی رایج است که یک پیام ایمیل می‌تواند تصاویر Inline در بدنهٔ خود داشته باشد و همچنین ضمیمه‌های معمولی مرتبط داشته باشد. با استفاده از MailMessage کلاس، ضمیمه‌های Inline می‌توانند استخراج شوند از LinkedResourceCollection کلاس، در حالی که ضمیمه‌های معمولی می‌توانند با AttachmentCollection کلاس پیام. اما این موضوع وقتی پیام با استفاده از کلاس Aspose.Email.Mapi.MapiMessage بارگذاری شود، متفاوت است، زیرا تمام تصاویر Inline و ضمیمه‌های معمولی در یک کلاس MapiAttachmentCollection در دسترس کاربر هستند. بنابراین نیاز است روشی طراحی شود که بتواند هنگام استفاده از MapiMessage ضمیمهٔ Inline و معمولی را تفکیک کند.

استفاده از Aspose.Email برای تفکیک ضمیمه‌های Inline و معمولی

این مقاله توضیح می‌دهد چگونه با استفاده از MapiMessage ضمیمه‌های Inline را از ضمیمه‌های معمولی تفکیک کنیم. برای تعیین این تفکیک، نوع بدنهٔ MapiMessage به‌صورت زیر در نظر گرفته می‌شود:

بدنه متن ساده: پیام‌های ایمیل با نوع بدنهٔ متن ساده نیازی به بررسی ندارند، چون تمام ضمیمه‌های این پیام‌ها همیشه ضمیمه‌های معمولی هستند.

بدنه Html: در مورد پیامی که نوع بدنهٔ HTML دارد، ضمیمه نه تنها باید ویژگی PR_ATTACH_FLAGS (0x37140003) را داشته باشد، بلکه مقدار آن باید برای ضمیمه‌های Inline برابر 0x00000004 باشد. اگر این شرط برآورده شود، سپس رفتار بر پایه تگ‌های PR_ATTACH_CONTENT_LOCATION و PR_ATTACH_CONTENT_ID برای تعیین نوع ضمیمه تعیین می‌گردد. با این حال، در عدم وجود تگ Mapi PR_ATTACH_FLAGS، ضمیمه برای ویژگی PR_ATTACH_DISPOSITION (0x3716001F یا 0x3716001E) بررسی می‌شود تا نوع ضمیمه مشخص شود.

بدنه Rtf: اگر بدنه RTF باشد، تمام ضمیمه‌های OLE به‌عنوان ضمیمه‌های Inline در نظر گرفته می‌شوند. مقدار PR_ATTACH_METHOD برای تمام ضمیمه‌های OLE برابر با 0x00000006 است.

نمونهٔ کد زیر نشان می‌دهد چگونه به‌صورت برنامه‌ای بین ضمیمه‌های Inline و معمولی تفکیک کنیم. تابع IsInlineAttachment یک ضمیمه و نوع بدنهٔ پیام را به‌عنوان پارامترهای ورودی می‌گیرد و اگر ضمیمه یک Inline باشد مقدار true برمی‌گرداند.