Hướng dẫn python script to extract data from outlook email - tập lệnh python để trích xuất dữ liệu từ email triển vọng

Hướng dẫn python script to extract data from outlook email - tập lệnh python để trích xuất dữ liệu từ email triển vọng

Ngày 4 tháng 6 năm 2020febr

Luôn có những kịch bản mà bạn có thể tự hỏi làm thế nào để có một chương trình để tự động đọc email từ Outlook và thực hiện một số xử lý dựa trên các tiêu chí nhất định. Trường hợp sử dụng phổ biến nhất là bạn muốn tự động xử lý tệp đính kèm email khi nhận được một số báo cáo theo lịch trình. Trong bài viết này, tôi sẽ giải thích cho bạn cách sử dụng Python để đọc email từ Outlook và lưu tệp đính kèm vào thư mục được chỉ định.

Prerequisites:

Để có thể truy cập ứng dụng gốc Outlook, chúng tôi sẽ cần sử dụng thư viện PyWin32. Hãy chắc chắn rằng bạn đã cài đặt thư viện này và nhập vào tập lệnh của bạn.

import win32com.client
#other libraries to be used in this script
import os
from datetime import datetime, timedelta

Bắt đầu nào!

Giống như giao tiếp với hệ thống hoặc ứng dụng khác, bạn sẽ cần bắt đầu một phiên ngay từ đầu. Bằng cách gọi chức năng GetNamespace, bạn có thể nhận được phiên Outlook cho các hoạt động tiếp theo.

outlook = win32com.client.Dispatch('outlook.application')
mapi = outlook.GetNamespace("MAPI")

Nếu bạn đã cấu hình nhiều tài khoản trong triển vọng của mình, bạn cần chuyển tên tài khoản khi truy cập các thư mục của nó, chúng tôi có thể đề cập đến chủ đề này trong một bài viết khác. Đối với bài viết này, hãy giả sử chúng tôi chỉ có 1 tài khoản được cấu hình trong Outlook.

for account in mapi.Accounts:
	print(account.DeliveryStore.DisplayName)

Để truy cập thư mục Hộp thư đến, bạn sẽ cần chuyển trong loại thư mục - 6 trong hàm bên dưới. Bạn có thể tham khảo tài liệu này để hiểu danh sách đầy đủ các loại thư mục, chẳng hạn như dự thảo, hộp thư đến, đã gửi, thư mục các mục đã xóa, v.v.

inbox = mapi.GetDefaultFolder(6)

Điều gì sẽ xảy ra nếu email của bạn nằm trong một thư mục phụ trong hộp thư đến của bạn? GetDefaultFolder có thuộc tính các thư mục nơi bạn có thể truy cập vào thư mục phụ bằng tên của nó. Chẳng hạn, để truy cập vào các chương trình của Your_Sub_Folder, trong thư mục Hộp thư đến:Folders attribute where you can access to the sub folder by it’s name. For instance, to access the “your_sub_folder” under the inbox folder:

inbox = mapi.GetDefaultFolder(6).Folders["your_sub_folder"]

Đọc email từ Outlook

Bây giờ bạn có thể truy cập vào hộp thư đến và thư mục phụ của nó. Bạn có thể xem tất cả các tin nhắn bằng cách nhận các mục như dưới đây. Nhưng bạn có thể muốn lọc các tin nhắn theo các tiêu chí nhất định, chẳng hạn như ngày nhận, từ, chủ đề, v.v. Để làm điều đó, chúng tôi có thể áp dụng một số điều kiện lọc cho các tin nhắn.

Sử dụng chức năng hạn chế để lọc thông điệp email của bạn. Chẳng hạn, chúng tôi có thể lọc bằng cách nhận thời gian trong 24 giờ qua và người gửi email là một người khác với chủ đề như báo cáo mẫuRestrict function to filter your email message. For instance, we can filter by receiving time in past 24 hours, and email sender as “” with subject as “Sample Report”

received_dt = datetime.now() - timedelta(days=1)
received_dt = received_dt.strftime('%m/%d/%Y %H:%M %p')
messages = messages.Restrict("[ReceivedTime] >= '" + received_dt + "'")
messages = messages.Restrict("[SenderEmailAddress] = ''")
messages = messages.Restrict("[Subject] = 'Sample Report'")

Lưu tệp đính kèm

Với tất cả các bộ lọc trên, chúng tôi sẽ chỉ có các thông điệp mà chúng tôi quan tâm. Hãy để lặp lại thông báo và kiểm tra các chi tiết.

#Let's assume we want to save the email attachment to the below directory
outputDir = r"C:\attachment"
try:
    for message in list(messages):
	try:
	    s = message.sender
	    for attachment in message.Attachments:
	        attachment.SaveASFile(os.path.join(outputDir, attachment.FileName))
	        print(f"attachment {attachment.FileName} from {s} saved")
	except Exception as e:
		print("error when saving the attachment:" + str(e))
except Exception as e:
		print("error when processing emails messages:" + str(e))

Có các thuộc tính khác như cơ thể, kích thước, chủ đề, thời gian điều chỉnh thời gian, v.v., vui lòng kiểm tra tài liệu Microsoft này để biết thêm chi tiết.

Nếu vấn đề cụ thể mà bạn đang cố gắng giải quyết không được đề cập trong bài viết này, bạn có thể kiểm tra một bài đăng khác của tôi 5 mẹo để đọc email từ Outlook in Python. Và bạn cũng có thể quan tâm để xem cách gửi email từ Outlook in Python, vui lòng kiểm tra sau này.thisarticle.

Theo luôn luôn, chào mừng bất kỳ ý kiến ​​hoặc câu hỏi. Theo dõi tôi trên Twitter để cập nhật thêm.

Bài đăng TagsAutomationPyThonPywin32automationpythonpywin32

Bạn cũng có thể thích

Stack Overflow cho các đội đang chuyển sang miền riêng của nó! Khi việc di chuyển hoàn tất, bạn sẽ truy cập các nhóm của mình tại StackoverFlowTeams.com và họ sẽ không còn xuất hiện ở thanh bên trái trên stackoverflow.com.stackoverflowteams.com, and they will no longer appear in the left sidebar on stackoverflow.com.

Kiểm tra email của bạn để cập nhật.

Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều

#!/usr/bin/python
"" "Script để tìm nạp email từ Outlook." ""
importwin32com.client win32com.client
defextract (đếm): extract(count):
"" "Nhận email từ Outlook." ""
mục = [] = []
Outlook = Win32com.Client.Dispatch ("Outlook.Application"). GetNamespace ("MAPI") = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
Inbox = Outlook.GetDefaultFolder (6) # "6" đề cập đến hộp thư đến = outlook.GetDefaultFolder(6) # "6" refers to the inbox
messages=inbox.Items = inbox.Items
message = message.getFirst () = messages.GetFirst()
i=0 = 0
Whilemessage: message:
thử::
message = dict () = dict()
Tin nhắn ["Chủ đề"] = getAttr (tin nhắn, "chủ đề", "")["Subject"] = getattr(message, "Subject", "")
message ["senton"] = getAttr (tin nhắn, "senton", "")["SentOn"] = getattr(message, "SentOn", "")
message ["EntryId"] = getAttr (tin nhắn, "entryid", "")["EntryID"] = getattr(message, "EntryID", "")
Tin nhắn ["người gửi"] = getAttr (tin nhắn, "người gửi", "")["Sender"] = getattr(message, "Sender", "")
message ["kích thước"] = getAttr (tin nhắn, "kích thước", "")["Size"] = getattr(message, "Size", "")
Tin nhắn ["Body"] = getattr (tin nhắn, "cơ thể", "")["Body"] = getattr(message, "Body", "")
items.Append (tin nhắn).append(message)
Ngoại trừExtEx: Exception as ex:
in ("Thư xử lý lỗi", Ex)("Error processing mail", ex)
i+=1 += 1
nếu tôi i < count:
message = message.getNext () = messages.GetNext()
khác::
trở lại items
trở lại items
DEFSHOW_MESSAGE (Mục): show_message(items):
"" "Hiển thị các tin nhắn." ""
items.sort (key = lambdatup: tup ["senton"])).sort(key=lambda tup: tup["SentOn"])
foriinitems: i in items:
in (i ["senton"], tôi ["chủ đề"])(i["SentOn"], i["Subject"])
DEFMAIN (): main():
"" "Tìm nạp và hiển thị thông báo hàng đầu." ""
Các mục = Trích xuất (5) = extract(5)
show_message (mục)(items)
if__name __ == "__ main__": __name__ == "__main__":
chính()()