परिचय
Aspose.Email FOSS for Python एक मुफ्त, MIT-लाइसेंस वाला पुस्तकालय है जो शुद्ध Python में Outlook-संगत संदेश फ़ाइलों को बनाने, पढ़ने और परिवर्तित करने के लिए है। PyPI पर aspose-email-foss के रूप में उपलब्ध है, यह Windows, macOS, Linux, Docker, और सर्वरलेस वातावरण में बिना Microsoft Office निर्भरता और बिना स्वामित्व रनटाइम के काम करता है।
पुस्तकालय दो प्रमुख क्षेत्रों को कवर करता है: एक उच्च-स्तरीय MAPI लेयर (MapiMessage) जो संदेश विषय, बॉडी, प्राप्तकर्ता और अटैचमेंट्स के साथ काम करने के लिए है; और एक निम्न-स्तरीय संरचनात्मक लेयर (MsgReader, CFBReader, CFBStorage, CFBStream) जो कच्चे Compound File Binary कंटेनरों को उजागर करती है जो प्रत्येक .msg फ़ाइल को आधार देती हैं।
यह लेख संस्करण 26.3 में जारी मुख्य विशेषताओं के माध्यम से चलता है, जो पुष्टि किए गए API सतह पर आधारित है।
मुख्य विशेषताएँ
उच्च-स्तरीय संदेश निर्माण MapiMessage के साथ
MapiMessage प्रारंभिक बिंदु है जिससे आप स्क्रैच से Outlook-संगत संदेश बना सकते हैं। MapiMessage.create() को विषय और बॉडी के साथ कॉल करें, प्राप्तकर्ता और अटैचमेंट जोड़ें, फिर सीधे एक .msg फ़ाइल में सहेजें।
from aspose.email_foss import msg
message = msg.MapiMessage.create(
"Quarterly status update",
"Hello team,\n\nPlease review the attached summary.\n\nRegards,\nEngineering",
)
message.set_property(msg.PropertyId.SENDER_NAME, "Build Agent")
message.set_property(msg.PropertyId.SENDER_EMAIL_ADDRESS, "agent@example.com")
message.add_recipient("alice@example.com", display_name="Alice Example")
message.add_recipient(
"carol@example.com",
display_name="Carol Example",
recipient_type=msg.RECIPIENT_TYPE_CC,
)
message.add_attachment("report.txt", b"Summary content here.\n", mime_type="text/plain")
message.save("output.msg")
MSG फ़ाइलों को पढ़ना और निरीक्षण करना
MsgReader एक मौजूदा .msg फ़ाइल तक संरचित पहुँच प्रदान करता है बिना उसे पूरी तरह से MapiMessage में लोड किए। यह शीर्ष-स्तर प्रॉपर्टी एंट्रीज़, प्राप्तकर्ता स्टोरेज, और अटैचमेंट स्टोरेज को अलग-अलग उजागर करता है, जिससे बड़े-फ़ाइल निरीक्षण और वैलिडेशन पाइपलाइन के लिए इसे व्यावहारिक बनाता है।
from aspose.email_foss import msg
with msg.MsgReader.from_file("output.msg") as reader:
header = reader.top_level_header
print(f"Recipients : {header.recipient_count}")
print(f"Attachments: {header.attachment_count}")
for entry in reader.iter_recipient_storages():
_, props = reader.parse_subobject_property_stream(entry.stream_id)
print(f" Recipient storage {entry.name}: {len(props)} property entries")
MSG राउंड-ट्रिप: लोड, संशोधित, सहेजें
क्योंकि MapiMessage लोड करने के लिए from_file() और लिखने के लिए save() का समर्थन करता है, एक पूर्ण रीड-मॉडिफ़ाई-राइट साइकिल केवल कुछ पंक्तियों में पूरी की जा सकती है। नामित प्रॉपर्टीज़, टाइप्ड एनेम्स, और यूनिकोड स्ट्रिंग हैंडलिंग set_property, PropertyId, और MapiNamedProperty के माध्यम से उपलब्ध हैं।
from aspose.email_foss import msg
with msg.MapiMessage.from_file("original.msg") as message:
message.set_property(msg.PropertyId.SUBJECT, "Updated Subject")
message.save("updated.msg")
EML / RFC 5322 रूपांतरण
MapiMessage.to_email_message() लोड किए गए MSG को एक मानक Python email.message.EmailMessage ऑब्जेक्ट में परिवर्तित करता है, जिससे मानक लाइब्रेरी का उपयोग करके RFC 5322 .eml फ़ॉर्मेट में निर्यात संभव होता है। विपरीत दिशा (MapiMessage.from_email_message()) एक EmailMessage से MapiMessage बनाता है।
from pathlib import Path
from aspose.email_foss import msg
with msg.MapiMessage.from_file("message.msg") as message:
eml_bytes = message.to_email_bytes()
Path("message.eml").write_bytes(eml_bytes)
# Reverse: load EML into MapiMessage
import email
raw_eml = Path("message.eml").read_bytes()
email_obj = email.message_from_bytes(raw_eml)
mapi = msg.MapiMessage.from_email_message(email_obj)
mapi.save("from_eml.msg")
CFB कंटेनर अन्वेषण
हर .msg फ़ाइल एक कॉम्पाउंड फ़ाइल बाइनरी (CFB) कंटेनर होती है। CFBReader डायरेक्टरी ट्री तक केवल-पढ़ने योग्य पहुँच प्रदान करता है, जिससे आप स्टोरेज और स्ट्रीम की सूची बना सकते हैं, पदानुक्रम में चल सकते हैं, और कच्चे स्ट्रीम बाइट्स निकाल सकते हैं — बिना MsgReader पर निर्भर हुए।
from aspose.email_foss.cfb import CFBReader
with CFBReader.from_file("message.msg") as reader:
print(f"CFB version : {reader.major_version}")
print(f"Sector size : {reader.sector_size}")
for depth, entry in reader.iter_tree():
indent = " " * depth
size = entry.stream_size if entry.is_stream() else "-"
print(f"{indent}{entry.name} [size={size}]")
संलग्नक संभालना
संलग्नक MapiMessage.add_attachment() (बाइनरी डेटा के लिए) या MapiMessage.add_embedded_message_attachment() (नेस्टेड MSG संदेशों के लिए) के माध्यम से जोड़े जाते हैं। दोनों विधियों में फ़ाइलनाम, कच्चे बाइट्स, और वैकल्पिक MIME प्रकार स्वीकार किया जाता है।
from aspose.email_foss import msg
message = msg.MapiMessage.create("Attachment demo", "See files below.")
message.add_attachment("data.csv", b"id,value\n1,100\n", mime_type="text/csv")
inner = msg.MapiMessage.create("Nested message", "This is embedded.")
message.add_embedded_message_attachment(inner, "nested.msg")
message.save("with_attachments.msg")
त्वरित प्रारंभ
pip install aspose-email-fossfrom aspose.email_foss import msg
# Create and save a minimal MSG
message = msg.MapiMessage.create("Hello World", "This is a test message.")
message.set_property(msg.PropertyId.SENDER_EMAIL_ADDRESS, "sender@example.com")
message.add_recipient("recipient@example.com", display_name="Recipient")
message.save("hello.msg")
# Load it back and convert to EML
with msg.MapiMessage.from_file("hello.msg") as loaded:
print(loaded.get_property_value(msg.PropertyId.SUBJECT))
eml = loaded.to_email_bytes()
open("hello.eml", "wb").write(eml)
समर्थित फ़ॉर्मेट्स
| फ़ॉर्मेट | एक्सटेंशन | पढ़ें | लिखें |
|---|---|---|---|
| संयुक्त फ़ाइल बाइनरी | .cfb | ✓ | ✓ |
| Outlook संदेश | .msg | ✓ | ✓ |
| EML / RFC 5322 | .eml | ✓ | ✓ |
ओपन सोर्स और लाइसेंसिंग
Aspose.Email FOSS Python के लिए MIT लाइसेंस के तहत जारी किया गया है। स्रोत रिपॉजिटरी github.com/aspose-email-foss पर उपलब्ध है और पैकेज PyPI पर aspose-email-foss के रूप में प्रकाशित किया गया है। व्यावसायिक उपयोग, संशोधन, और पुनर्वितरण सभी MIT शर्तों के अंतर्गत अनुमति है।