Hướng dẫn python read outlook email - python đọc email triển vọng

Hướng dẫn python read outlook email - python đọc email triển vọng

Nội dung chính ShowShow

  • Bạn cũng có thể thích
  • Làm cách nào để đọc email Office 365 bằng Python?
  • Làm cách nào để mở email Outlook từ Python?
  • Python có thể tương tác với triển vọng không?
  • Làm cách nào để đọc phần thân của một email trong Python?

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: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”Restrict 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.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 TagsAutomationPyThonPywin32automationpythonpywin32automationpythonpywin32

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

Từ ví dụ của bạn - không rõ bạn có được xác thực hay không ...

Nếu bạn là thì bạn sẽ có thể liệt kê các thư mục hộp thư. Trong trường hợp bên dưới - bạn có thể truy cập hộp thư đến và sau đó liệt kê các bộ phụ:

from O365 import Account, Connection,  MSGraphProtocol, Message, MailBox, oauth_authentication_flow

scopes=['basic', 'message_all']
credentials=(, )
account = Account(credentials = credentials)

if not account.is_authenticated:  # will check if there is a token and has not expired
    account.authenticate(scopes=scopes)

account.connection.refresh_token()mailbox = account.mailbox()
inbox = mailbox.get_folder(folder_name='Inbox')
child_folders = inbox.get_folders(25)
for folder in child_folders:
    print(folder.name, folder.parent_id)

Phần này sẽ cho phép bạn liệt kê các thư mục (và cả tin nhắn).

Nếu tôi nhìn vào mã của bạn - có vẻ như bạn đang cố gắng làm cả hai?

Hãy thử làm một cái gì đó như sau để có được sự phân trang thông qua hộp thư đến của bạn:

for message in inbox.get_messages(5):
    if message.subject == 'test':
        print(message.body)

Lưu ý rằng tôi đang lặp qua 5 tin nhắn đầu tiên trong hộp thư đến tìm kiếm một tin nhắn có chủ đề 'kiểm tra'. Nếu nó tìm thấy tin nhắn - thì nó sẽ in cơ thể.

Hy vọng rằng điều này sẽ làm sáng tỏ một chút.

Làm cách nào để đọc email Office 365 bằng Python?

Cách đọc email từ Outlook in Python...

Nhập Win32Com.Client #Thư viện khác sẽ được sử dụng trong HĐH Nhập tập lệnh này từ DateTime Nhập DateTime, TimEdelTA.....

Outlook = Win32com.Client.Dispatch ('Outlook.Application') Mapi = Outlook.GetNamespace ("Mapi").

Làm cách nào để mở email Outlook từ Python?

StartFile ('Outlook') Cách dễ nhất để mở Outlook trên Windows chỉ bằng cách sử dụng lệnh gọi Python One ngắn và ngắn gọn là sử dụng lệnh gọi chức năng OS.startFile ('Outlook') từ mô-đun OS.use the os.startfile('outlook') function call from the os module.use the os. startfile('outlook') function call from the os module.

Python có thể tương tác với triển vọng không?

Bắt đầu.Nếu bạn đã mở Outlook của mình, bây giờ bạn đã sẵn sàng để tương tác một cách chương trình với nó bằng Python và bắt đầu tự động hóa các nhiệm vụ thực sự nhàm chán!If you have your Outlook already open, you are now ready to interact programatically with it using Python and start automating away the really boring tasks!If you have your Outlook already open, you are now ready to interact programatically with it using Python and start automating away the really boring tasks!

Làm cách nào để đọc phần thân của một email trong Python?

Sử dụng email....

print(email_contents).

Tin nhắn = Email.message_from_string (email_contents).

cho tải trọng trong tin nhắn.get_payload ():.

in (tải trọng. get_payload ()).