Cách truy cập các thư mục con trong Outlook bằng python

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] 

Chủ Đề