مقدمه

تجزیه برنامه‌نویسی پیام‌های ایمیل یک نیاز رایج برای مهاجرت داده‌ها، جریان‌های کاری بایگانی و ابزارهای انطباق است. فایل‌های MSG برنامه Outlook از قالب مخزن باینری ترکیبی (Compound File Binary یا CFB) همراه با ویژگی‌های MAPI برای رمزگذاری فراداده پیام، محتوای بدنه، دریافت‌کنندگان و پیوست‌ها استفاده می‌کنند. کار با این قالب در Python به‌طور سنتی یا نیاز به کتابخانه‌های تجاری یا دست‌کاری باینری سطح پایین داشته است.

پکیج aspose-email-foss یک کتابخانهٔ خالص-Python با مجوز MIT برای خواندن، ایجاد و تبدیل فایل‌های MSG برنامه Outlook فراهم می‌کند. این کتابخانه یک MapiMessage API سطح-بالا برای کارهای رایج به‌همراه دسترسی MsgReader سطح-پایین برای بازرسی دقیق ساختار CFB زیرین ارائه می‌دهد. این کتابخانه نیاز به Python نسخهٔ ۳.۱۰ یا بالاتر دارد و هیچ وابستگی بومی ندارد.

چه نیاز داشته باشید خط موضوع و بدنه را از یک دسته از پیام‌های بایگانی شده استخراج کنید، پیوست‌ها را برای ایندکس‌گذاری فهرست کنید، یا فایل‌های MSG را به قالب استاندارد RFC 5322 تبدیل کنید، این کتابخانه تجزیه باینری را انجام می‌دهد تا بتوانید بر منطق برنامهٔ خود تمرکز کنید.


موارد گنجانده شده

خواندن فایل‌های MSG با MapiMessage

کلاس MapiMessage نقطهٔ ورودی اصلی برای تجزیه فایل‌های MSG برنامه Outlook است. یک فایل را باز کنید، به ویژگی‌های آن دسترسی پیدا کنید و با استفاده از یک مدیر زمینه (context manager) به‌صورت تمیز آن را ببندید.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("meeting-invite.msg") as message:
    print(f"Subject: {message.subject}")
    print(f"Body: {message.body[:200]}")
    print(f"HTML body available: {message.body_html is not None}")

متد from_file محفظه CFB را می‌خواند، جریان‌های ویژگی MAPI را تجزیه می‌کند و ویژگی‌های تایپ‌شده را پر می‌کند. ویژگی‌های subject، body و body_html به‌طور مستقیم رشته‌های رمزگشایی‌شده را برمی‌گردانند.

استخراج دریافت‌کنندگان

هر فایل MSG اطلاعات دریافت‌کنندگان را در ذخیره‌سازی‌های اختصاصی MAPI ذخیره می‌کند. ویژگی MapiMessage.recipients فهرستی از اشیاء MapiRecipient را برمی‌گرداند که دارای فیلدهای تایپ‌شده برای نام نمایشی، آدرس ایمیل و نوع دریافت‌کننده (TO، CC یا BCC) هستند.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("team-update.msg") as message:
    for recipient in message.recipients:
        print(
            f"{recipient.display_name} <{recipient.email_address}> "
            f"type={recipient.recipient_type}"
        )

کار با پیوست‌ها

متد iter_attachments_info اشیاء MapiAttachment را تولید می‌کند که شامل نام فایل، بایت‌های خام، نوع MIME و شناسه محتوا (Content-ID) اختیاری برای تصاویر درون‌متنی هستند.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("report.msg") as message:
    for att in message.iter_attachments_info():
        print(f"  {att.filename} ({att.mime_type}, {len(att.data)} bytes)")
        if att.content_id:
            print(f"    inline content-id: {att.content_id}")

دسترسی به ویژگی‌های MAPI

برای موقعیت‌هایی که به مقادیر خاص ویژگی‌های MAPI فراتر از ویژگی‌های راحتی نیاز دارند، از get_property_value همراه با ثابت PropertyId استفاده کنید. این امکان دسترسی مستقیم به هر ویژگی ذخیره‌شده در فایل MSG را فراهم می‌کند.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("notification.msg") as message:
    sender = message.get_property_value(msg.PropertyId.SENDER_NAME)
    email = message.get_property_value(msg.PropertyId.SENDER_EMAIL_ADDRESS)
    delivery = message.get_property_value(msg.PropertyId.MESSAGE_DELIVERY_TIME)
    print(f"From: {sender} <{email}>")
    print(f"Delivered: {delivery}")

تکرار بر روی تمام ویژگی‌ها

زمانی که نیاز دارید تمام ویژگی‌های یک پیام را (برای اشکال‌زدایی، حسابرسی یا مهاجرت) بررسی کنید، روش iter_properties اشیای MapiProperty را با اطلاعات کامل برچسب و مقدار ارائه می‌دهد.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("sample.msg") as message:
    for prop in message.iter_properties():
        print(
            f"tag=0x{prop.property_tag:08X} "
            f"type=0x{prop.property_type:04X} "
            f"value={prop.value!r}"
        )

تبدیل MSG به EML

روش to_email_message یک MSG تجزیه‌شده را به یک شیء استاندارد Python email.message.EmailMessage تبدیل می‌کند. از آنجا می‌توانید پیام را با استفاده از کتابخانه استاندارد به فرمت RFC 5322 (EML) سریالایز کنید.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("archive.msg") as message:
    email_message = message.to_email_message()
    eml_bytes = email_message.as_bytes()
    with open("archive.eml", "wb") as f:
        f.write(eml_bytes)

توجه داشته باشید که خروجی EML از ماژول داخلی email Python برای سریال‌سازی استفاده می‌کند. این کتابخانه تبدیل MSG-به-MAPI-به-EmailMessage را انجام می‌دهد؛ کتابخانه استاندارد فرمت سیمی RFC 5322 را مدیریت می‌کند.


شروع سریع

پکیج را از PyPI نصب کنید و اولین فایل MSG خود را در کمتر از ۲۰ خط تجزیه کنید:

# Install: pip install aspose-email-foss>=26.3
from aspose.email_foss import msg

# Create a new message
message = msg.MapiMessage.create(
    "Project status update",
    "Hello team,\n\nPlease review the attached report.\n\nRegards",
)
message.add_recipient("alice@example.com", display_name="Alice")
message.add_attachment("notes.txt", b"meeting notes\n", mime_type="text/plain")
message.save("status-update.msg")

# Read it back and extract data
with msg.MapiMessage.from_file("status-update.msg") as loaded:
    print(f"Subject: {loaded.subject}")
    print(f"Recipients: {len(loaded.recipients)}")
    for att in loaded.iter_attachments_info():
        print(f"Attachment: {att.filename} ({len(att.data)} bytes)")

قالب‌های پشتیبانی‌شده

قالبپسوندخواندننوشتن
Outlook MSG.msgبلهبله
فایـل ترکیبی باینری.cfbبلهبله
EML (از طریق تبدیل).emlبله (از طریق from_email_message)بله (از طریق to_email_message)

پشتیبانی از EML از طریق تبدیل انجام می‌شود: MapiMessage.from_email_message() از یک شیء Python email.message.EmailMessage وارد می‌شود و to_email_message() خروجی می‌دهد. تجزیه مستقیم فایل EML فراهم نیست — کتابخانه استاندارد فرمت سیمی EML را مدیریت می‌کند.


منبع باز و مجوزدهی

Aspose.Email FOSS برای Python تحت مجوز MIT منتشر شده است. شما آزاد هستید که کتابخانه را در پروژه‌های تجاری و غیرتجاری استفاده، تغییر و توزیع کنید. کد منبع کامل در GitHub موجود است.

این کتابخانه یک پیاده‌سازی خالص-Python است که هیچ افزونهٔ کامپایل‌شده یا وابستگی بومی ندارد. این کتابخانه بر روی هر پلتفرمی که از Python 3.10 یا بالاتر پشتیبانی می‌کند اجرا می‌شود.


آغاز کار

منابع بیشتری را برای کار با Aspose.Email FOSS برای Python بررسی کنید:

منابع مرتبط