Chuyển đổi OLM sang PST
Chuyển đổi OLM sang PST
OLM (Outlook for Mac) là định dạng tệp được Microsoft Outlook cho Mac sử dụng để lưu trữ tin nhắn email, liên hệ, lịch, công việc và dữ liệu khác. Đây là định dạng tệp gốc của Outlook cho Mac, do đó không thể mở tệp Outlook cho Mac (OLM) bằng Outlook cho Windows. Để làm việc với tệp OLM trên Windows, Aspose Email cung cấp các công cụ được thiết kế đặc biệt để xử lý tệp OLM. Cách tiếp cận của nó là chuyển đổi tệp OLM sang định dạng PST (Outlook Data File), được hỗ trợ rộng rãi trong môi trường Windows. Khi đã chuyển sang định dạng PST, bạn có thể nhập dữ liệu vào Outlook cho Windows hoặc bất kỳ client email tương thích nào khác.
Cách Tiếp Cận Chính
Mẫu mã dưới đây minh họa cách chuyển đổi tệp Outlook OLM sang PST bằng thư viện Aspose.Email. Nó đọc từng thư mục và các tin nhắn tương ứng từ tệp OLM và thêm chúng vào tệp PST mới theo cùng thứ tự.
- Tạo một đối tượng của OlmStorage lớp để mở tệp OLM nguồn.
- Sử dụng PersonalStorage.create phương thức để tạo tệp PST mới với tên tệp và phiên bản định dạng được chỉ định.
- Đọc đệ quy mỗi thư mục và các tin nhắn của nó từ tệp OLM.
- Sử dụng hàm add_to_pst để thêm mỗi thư mục và các tin nhắn của nó vào tệp PST, duy trì cấu trúc gốc.
import aspose.email as ae
olm = ae.storage.olm.OlmStorage("my.olm")
pst = ae.storage.pst.PersonalStorage.create("my.pst", ae.storage.pst.FileFormatVersion.UNICODE)
for folder in olm.folder_hierarchy:
add_to_pst(pst.root_folder, folder)
Mã này là script chính để khởi động quá trình chuyển đổi tệp OLM sang PST bằng thư viện aspose.email. Nó minh họa cách mở tệp OLM, tạo tệp PST mới và gọi hàm add_to_pst để thực hiện nhiệm vụ chuyển dữ liệu. Script này là điểm khởi đầu cho quá trình di chuyển, sử dụng hàm một cách hiệu quả để xử lý việc chuyển chi tiết các thư mục và tin nhắn.
Chuyển Đổi Đệ Quy Thư Mục và Tin Nhắn
Cách tiếp cận này cung cấp khả năng kiểm soát sâu hơn quy trình xử lý thư mục và tin nhắn khi di chuyển dữ liệu email từ tệp OLM sang tệp PST. Mẫu mã dưới đây sử dụng hàm add_to_pst định nghĩa logic chuyển đổi. Vai trò chính của nó là duyệt đệ quy qua các thư mục và tin nhắn, đảm bảo chúng được chuyển và sao chép đúng cách sang định dạng PST. Hàm này rất tái sử dụng và dự kiến được sử dụng như một phần của ứng dụng hoặc script lớn hơn quản lý việc mở và tạo các tệp này.
def add_to_pst(pst_folder, olm_folder):
pst_sub_folder = pst_folder.get_sub_folder(olm_folder.name)
for msg in olm_folder.enumerate_mapi_messages():
if pst_sub_folder is None:
pst_sub_folder = pst_folder.add_sub_folder(olm_folder.name, get_container_class(msg.message_class))
pst_sub_folder.add_message(msg)
if pst_sub_folder is None:
pst_sub_folder = pst_folder.add_sub_folder(olm_folder.name)
for olm_sub_folder in olm_folder.sub_folders:
add_to_pst(pst_sub_folder, olm_sub_folder)
Xác định Các Loại Thư Mục trong PST
Khi chuyển đổi tệp OLM sang PST, chúng ta phải đảm bảo cấu trúc thư mục được giữ nguyên và mỗi thư mục trong tệp PST có loại đúng. Không giống như PST, các thư mục trong OLM không có loại được định trước. Để phân loại và chuyển dữ liệu chính xác, hãy thực hiện các bước dưới đây:
- Đọc tin nhắn đầu tiên từ thư mục OLM và xác định loại của nó.
- Sử dụng loại tin nhắn này để tính toán loại thư mục phù hợp trong PST bằng phương pháp phân loại.
- Tạo một thư mục có loại đã xác định trong tệp PST.
- Thêm tin nhắn vào thư mục PST mới tạo.
Đối với các tin nhắn còn lại trong thư mục OLM, chúng tôi giả định chúng thuộc cùng một danh mục, vì loại thư mục đã được xác định trước.
Hàm get_container_class giúp phân loại các mục Outlook bằng cách ánh xạ các lớp tin nhắn khác nhau tới các loại thư mục PST phù hợp:
def get_container_class(message_class):
if message_class.startswith("IPM.Contact") or message_class.startswith("IPM.DistList"):
return "IPF.Contact"
if message_class.startswith("IPM.StickyNote"):
return "IPF.StickyNote"
if message_class.startswith("IPM.Activity"):
return "IPF.Journal"
if message_class.startswith("IPM.Task"):
return "IPF.Task"
if message_class.startswith("IPM.Appointment") or message_class.startswith("IPM.Schedule.meeting"):
return "IPF.Appointment"
return "IPF.Note"