چگونه فایلهای 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 مستقل است. خواندنهای همزمان از نمونههای جداگانه ایمن هستند.