Memperkenalkan Aspose.Email FOSS untuk Python

Jika Anda perlu membaca teks dari Microsoft OneNote .one file dalam skrip Python, tanpa menginstal Microsoft Office atau menjalankan Windows, Aspose.Note FOSS for Python adalah solusinya. Ini adalah perpustakaan 100% gratis, sumber terbuka yang mengurai format biner OneNote secara langsung dan menyediakan API Python yang bersih.

Perpustakaan ini menargetkan Python 3.10 ke atas. Ia mengimplementasikan format Compound File Binary (CFB) dan format pesan MSG dari awal, memberi Anda kontrol deterministik atas cara pesan email diserialisasi dan dibaca. Karena implementasinya murni Python, ia berjalan identik di Windows, macOS, Linux, dan dalam lingkungan terkontainer.

pip install aspose-note

Aspose.Email FOSS dirancang untuk pengembang yang membangun pipeline pemrosesan email, alat arsip kepatuhan, alur kerja analisis forensik, atau aplikasi apa pun yang perlu membuat atau memeriksa file pesan kompatibel Outlook tanpa instalasi Exchange atau Outlook yang berjalan.


Fitur Utama

Teks OneNote disimpan dalam RichText node yang tersebar di seluruh halaman, outline, dan elemen outline. GetChildNodes(RichText) melakukan pencarian rekursif pada seluruh pohon dokumen dan mengembalikan setiap node teks sebagai daftar datar:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    if rt.Text:
        print(rt.Text)

Ini adalah cara tercepat untuk mendapatkan semua konten teks dari sebuah .one file.


Baca dan Konversi MSG ke EML

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
lines = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]

with open("extracted.txt", "w", encoding="utf-8") as f:
    f.write("\n".join(lines))

print(f"Saved {len(lines)} text blocks to extracted.txt")

Muat file .msg yang ada dengan MapiMessage.from_file() dan konversi menjadi objek EmailMessage standar Python melalui to_email_message(). Dari situ, serialisasikan ke byte EML untuk penyimpanan atau penerusan melalui SMTP.

Periksa Interna MSG:

from aspose.note import Document, Page, RichText

doc = Document("MyNotes.one")
for page in doc.GetChildNodes(Page):
    title = (
        page.Title.TitleText.Text
        if page.Title and page.Title.TitleText
        else "(untitled)"
    )
    page_texts = [rt.Text for rt in page.GetChildNodes(RichText) if rt.Text]
    print(f"\n=== {title} ===")
    for text in page_texts:
        print(text)

Gunakan MsgReader dan CFBReader yang mendasarinya untuk memeriksa struktur biner dari file MSG. Akses metadata CFB (versi, ukuran sektor, jumlah entri direktori) dan iterasi entri properti MAPI pada tingkat biner.

Tautan hiper disimpan pada TextRun objek di dalam RichText node. Periksa run.Style.IsHyperlink:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.Runs:
        if run.Style.IsHyperlink and run.Style.HyperlinkAddress:
            print(f"{run.Text!r}  ->  {run.Style.HyperlinkAddress}")

Baca dan telusuri kontainer Compound File Binary apa pun menggunakan CFBReader. Enumerasikan storage dan stream, selesaikan jalur berdasarkan nama, dan ekstrak data stream mentah untuk pemrosesan khusus.

Setiap TextRun membawa format per-karakter melalui dirinya TextStyle:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.Runs:
        s = run.Style
        if any([s.Bold, s.Italic, s.Underline]):
            flags = ", ".join(f for f, v in [
                ("bold", s.Bold), ("italic", s.Italic), ("underline", s.Underline)
            ] if v)
            print(f"[{flags}] {run.Text.strip()!r}")

Instal perpustakaan dan buat file MSG pertama Anda dalam kurang dari sepuluh baris:

Format yang Didukung:

import io, urllib.request
from aspose.note import Document, RichText

##Example: load from bytes already in memory
one_bytes = open("MyNotes.one", "rb").read()
doc = Document(io.BytesIO(one_bytes))
texts = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
print(f"Extracted {len(texts)} text block(s)")

Sumber Terbuka & Lisensi

Pada terminal Windows, sys.stdout mungkin menggunakan enkoding warisan yang menyebabkan crash pada karakter Unicode. Tambahkan ini di awal skrip Anda:

import sys
if hasattr(sys.stdout, "reconfigure"):
    sys.stdout.reconfigure(encoding="utf-8", errors="replace")

Memulai

FiturDidukung
Baca .one berkas (jalur atau aliran)Ya
Ekstrak RichText.Text (teks biasa)Ya
Periksa TextRun.Style (tebal, miring, tautan, font)Ya
Ekstrak teks dari sel tabelYa
Baca judul halamanYa
Tulis kembali ke .oneTidak
Dokumen terenkripsiTidak

Langkah Selanjutnya