giả định. gửi email cho. NET cung cấp API để đọc tệp Microsoft Outlook PST. Bạn có thể tải tệp PST từ đĩa hoặc truyền trực tuyến vào một phiên bản của lớp PersonalStorage và nhận thông tin về nội dung của nó, chẳng hạn như thư mục, thư mục con và thư. API cũng cung cấp khả năng bao gồm các thư mục tìm kiếm trong khi duyệt qua thư từ các thư mục PST
Đang tải tệp PST
Tệp Outlook PST có thể được tải trong một phiên bản của lớp PersonalStorage. Đoạn mã sau chỉ cho bạn cách tải tệp PST
Hiển thị thông tin PST
Sau khi tải tệp PST trong lớp PersonalStorage, bạn có thể nhận thông tin về tên hiển thị tệp, thư mục gốc, thư mục con và số lượng thư. Đoạn mã sau chỉ cho bạn cách hiển thị tên tệp PST, thư mục và số thư trong thư mục
Pywin32 là một trong những gói phổ biến nhất để tự động hóa công việc hàng ngày của bạn cho Microsoft triển vọng/excel, v.v. Trong bài viết trước của tôi, chúng tôi đã thảo luận về cách sử dụng gói này để đọc email và lưu tệp đính kèm từ triển vọng. Vì có khá nhiều câu hỏi được đặt ra trong các bình luận mà không được đề cập trong bài viết gốc, bài viết này nhằm mục đích xem xét thông qua một số chủ đề nâng cao để đọc email từ triển vọng thông qua gói Python Pywin32
Nếu bạn chưa đọc qua bài viết trước, bạn có thể xem lại từ đây
điều kiện tiên quyết
Giả sử bạn đã cài đặt gói Pywin32 mới nhất và đã nhập các gói cần thiết bên dưới vào tập lệnh của mình và bạn sẽ không gặp phải bất kỳ lỗi nào sau khi thực hiện phương thức GetNamespace để thiết lập kết nối triển vọng
import win32com.client #other libraries to be used in this script import os from datetime import datetime, timedelta outlook = win32com.client.Dispatch['outlook.application'] mapi = outlook.GetNamespace['MAPI']
Khi sử dụng mã bên dưới để lặp lại thuộc tính Tài khoản, bạn sẽ thấy bất kỳ tài khoản nào bạn đã định cấu hình trong triển vọng của mình
for account in mapi.Accounts: print[account.DeliveryStore.DisplayName] #Assuming below accounts have been configured: #abc@hotmail.com #def@gmail.com
Bây giờ hãy chuyển sang các chủ đề chúng ta sẽ thảo luận trong bài viết này
Đọc Email từ nhiều tài khoản Outlook
Nếu bạn có nhiều tài khoản được định cấu hình trong ứng dụng triển vọng của mình, để truy cập vào một trong các tài khoản, bạn có thể sử dụng phương thức Thư mục và chỉ định tên tài khoản hoặc chỉ mục của tài khoản, e. g
for idx, folder in enumerate[mapi.Folders]: #index starts from 1 print[idx+1, folder] #Assuming below output: # 1 abc@hotmail.com # 2 def@gmail.com
Và để truy cập các thư mục con trong một tài khoản email cụ thể, bạn có thể tiếp tục sử dụng phương thức thư mục để chỉ định tên thư mục con hoặc chỉ mục của thư mục. Trước đó, bạn có thể muốn kiểm tra các thư mục con có sẵn là gì và giá trị chỉ mục của nó như bên dưới
for idx, folder in enumerate[mapi.Folders["abc@hotmail.com"].Folders]: print[idx+1, folder] # or using index to access the folder for idx, folder in enumerate[mapi.Folders[1].Folders]: print[idx+1, folder]
Bạn sẽ thấy một cái gì đó tương tự như dưới đây
Với chỉ mục và tên thư mục ở trên, bạn sẽ có thể truy cập các thông báo email theo bên dưới
messages = mapi.Folders["abc@company.com"].Folders["Inbox"].Items # or messages = mapi.Folders[1].Folders[2].Items for msg in list[messages]: print[msg.Subject]
Mặc dù chỉ mục sẽ không bị thay đổi khi bạn di chuyển lên/xuống thư mục của mình trong triển vọng, rõ ràng sử dụng tên thư mục vẫn tốt hơn nhiều so với chỉ mục về khả năng đọc mã
Lọc email dựa trên cửa sổ thời gian nhận
Khi đọc email từ hộp thư đến của triển vọng, bạn có thể muốn phóng to các email trong khoảng thời gian nhận cụ thể thay vì quét qua hàng nghìn email bạn đã nhận được trong hộp thư đến. Để lọc email dựa trên các điều kiện nhất định, bạn có thể sử dụng phương pháp hạn chế cùng với các toán tử logic
Chẳng hạn, để lọc các email nhận được từ ngày đầu tiên của tháng hiện tại cho đến 12 giờ sáng hôm nay
today = datetime.today[] # first day of the month start_time = today.replace[month=1, hour=0, minute=0, second=0].strftime['%Y-%m-%d %H:%M %p'] #today 12am end_time = today.replace[hour=0, minute=0, second=0].strftime['%Y-%m-%d %H:%M %p'] messages = messages.Restrict["[ReceivedTime] >= '" + start_time + "' And [ReceivedTime]