چگونه فایل‌های MSG را در پایتون تجزیه کنیم

چگونه فایل‌های MSG را در پایتون تجزیه کنیم

aspose-email-foss for Python یک pure-Python API برای خواندن فایل‌های Outlook MSG بدون وابستگی به Microsoft Office فراهم می‌کند. یک فایل را در یک شیء MapiMessage بارگذاری کنید تا به تمام داده‌های پیام دسترسی پیدا کنید.

راهنمای گام به گام

مرحله ۱: نصب بسته

pip install aspose-email-foss

نیاز به Python 3.10 یا بالاتر دارد.


مرحله ۲: وارد کردن کلاس MapiMessage

from aspose.email_foss.msg import MapiMessage

مرحله ۳: بارگذاری یک فایل MSG

msg = MapiMessage.from_file("message.msg")

برای تجزیهٔ ملایم فایل‌های خراب، strict=False را ارسال کنید:

msg = MapiMessage.from_file("message.msg", strict=False)

مرحله ۴: دسترسی به ویژگی‌های پیام

print(f"Subject: {msg.subject}")
print(f"Body: {msg.body}")
print(f"HTML Body: {msg.body_html[:200] if msg.body_html else 'None'}")
print(f"Message Class: {msg.message_class}")

مرحله 5: فهرست پیوست‌ها

for att in msg.iter_attachments_info():
    name = att.storage_name
    is_embedded = att.is_embedded_message
    print(f"Attachment: {name}, embedded={is_embedded}")

مرحله ۶: بررسی ساختار CFB سطح پایین

from aspose.email_foss.cfb import CFBReader

reader = CFBReader.from_file("message.msg")
print(f"Directory entries: {reader.directory_entry_count}")
for entry in reader.iter_streams():
    print(f"  Stream: {entry}")
reader.close()

مشکلات رایج و راه‌حل‌ها

CFBError در هنگام بارگذاری

فایل یک مخزن CFB معتبر نیست. اطمینان حاصل کنید که یک فایل MSG واقعی Outlook است، نه یک EML.

بدنه خالی است اما بدنه HTML دارای محتوا است

برخی پیام‌ها محتوا را فقط در HTML ذخیره می‌کنند. وقتی msg.body None را برمی‌گرداند، msg.body_html را بررسی کنید.

هشدارهای اعتبارسنجی

به msg.validation_issues دسترسی پیدا کنید تا یک تاپل از هشدارهای انطباق برای فایل بارگذاری شده را ببینید.


سوالات متداول (FAQ)

آیا می‌توانم فایل‌های EML را بخوانم؟

به‌طور مستقیم نیست. کتابخانه فرمت MSG (CFB) را مدیریت می‌کند. ابتدا محتوای EML را به یک شیء EmailMessage تبدیل کنید، سپس از MapiMessage.from_email_message() استفاده کنید.

آیا بارگذاری تمام داده‌های پیوست را در حافظه می‌خواند؟

خیر. متادیتای پیوست به‌صورت درخواست‌محور خوانده می‌شود. برای تکرار سبک از iter_attachments_info() استفاده کنید.

آیا ایمن برای چندنخی است؟

هر نمونه MapiMessage مستقل است. خواندن‌های همزمان از نمونه‌های جداگانه ایمن هستند.

 فارسی