소개
Aspose.Email FOSS for Python은 순수 Python로 Outlook 호환 메시지 파일을 생성, 읽기 및 변환하기 위한 무료 MIT 라이선스 라이브러리입니다. PyPI에서 aspose-email-foss로 제공되며, Windows, macOS, Linux, Docker 및 서버리스 환경에서 Microsoft Office 의존성 없이, 독점 런타임 없이 작동합니다.
이 라이브러리는 두 가지 주요 영역을 다룹니다: 메시지 제목, 본문, 수신자 및 첨부 파일을 다루는 고수준 MAPI 계층 (MapiMessage); 그리고 모든 .msg 파일의 기반이 되는 원시 Compound File Binary 컨테이너를 노출하는 저수준 구조 계층 (MsgReader, CFBReader, CFBStorage, CFBStream).
이 문서는 확인된 API 표면을 기반으로 버전 26.3에 포함된 주요 기능들을 살펴봅니다.
주요 기능
고수준 메시지 생성 (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()을 지원하므로 전체 읽기-수정-쓰기 사이클을 몇 줄만으로 구현할 수 있습니다. 명명된 속성, 타입이 지정된 열거형, Unicode 문자열 처리는 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)
지원되는 형식
| 포맷 | 확장자 | 읽기 | 쓰기 |
|---|---|---|---|
| Compound File Binary | .cfb | ✓ | ✓ |
| Outlook Message | .msg | ✓ | ✓ |
| EML / RFC 5322 | .eml | ✓ | ✓ |
오픈 소스 및 라이선스
Aspose.Email FOSS for Python은 MIT 라이선스로 배포됩니다. 소스 저장소는 github.com/aspose-email-foss에서 확인할 수 있으며, 패키지는 PyPI에 aspose-email-foss로 게시됩니다. 상업적 사용, 수정 및 재배포는 모두 MIT 조건에 따라 허용됩니다.