파이썬 읽기 아웃룩 이메일

Salman Mehmood 2023년10월10일
  1. win32com.client 모듈을 사용하여 Outlook 애플리케이션에서 이메일 읽기
  2. 속성으로 이메일 필터링
파이썬 읽기 아웃룩 이메일

이 기사에서는 win32com.client 모듈을 사용하여 Outlook 애플리케이션에서 이메일을 읽는 방법에 대해 설명합니다. 또한 Python에서 다른 속성으로 이메일을 필터링하는 방법도 배웁니다.

win32com.client 모듈을 사용하여 Outlook 애플리케이션에서 이메일 읽기

해당 제품의 가격이 변동하는지 확인하기 위해 아마존 웹사이트에서 특정 제품을 계속 모니터링하고 싶다고 가정해 보겠습니다. 간단하게 하기 위해 Python 스크립트를 사용하여 Outlook에서 이메일을 읽습니다.

우리는 최신 이메일을 읽고 이메일 발신자가 누구이며 이메일 제목이 무엇인지 알려주는 Python 프로그램을 만들 것입니다. 이것은 또한 이메일의 본문이 무엇인지 알려줄 것입니다.

먼저 pywin32 패키지를 설치합니다.

pip install pywin32

이 패키지는 Outlook을 호출하고 Outlook에서 이메일을 읽습니다. 이 작업이 완료되면 win32com에서 client 모듈을 가져와서 프로그램을 작성할 수 있습니다.

import win32com.client as client

이제 My_OL_App이라는 변수를 만들고 Dispatch()를 사용하여 개체를 가져옵니다. Dispatch() 함수는 Outlook.Application을 허용하고 MAPI라는 API를 사용하는 GetNameSpace()를 호출합니다.

다음 줄에서 MY_Inbox라는 또 다른 변수를 만든 다음 My_OL_App.GetDefaultFolder()를 호출하여 Outlook 응용 프로그램에서 가져오는 데이터를 저장합니다. 이제 받은 편지함 폴더를 나타내는 괄호 안에 6을 넣습니다.

숫자는 여러 종류의 폴더를 나타냅니다. 예를 들어 5는 전송된 항목을 나타내고 마찬가지로 삭제된 항목과 보관된 항목을 나타냅니다. 이 링크에 언급된 폴더를 나타내는 다른 번호 목록이 있습니다. 다른 폴더를 통과하려는 경우 확인할 수 있습니다.

My_OL_App = client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
MY_Inbox = My_OL_App.GetDefaultFolder(6)

가져온 메시지나 다른 이메일을 저장하기 위해 항목을 호출하는 동안 받은 편지함 전체에 액세스할 수 있으며 MY_ib_items 변수에 저장합니다. Msg라는 다른 변수를 생성한 다음 MY_ib_items.GetLast()를 호출하여 최신 이메일을 가져옵니다.

MY_ib_items = MY_Inbox.Items
Msg = MY_ib_items.GetLast()

모든 이메일을 살펴보고 싶다면 이 튜토리얼의 뒷부분에서 보여드리겠습니다. 이제 다음 코드를 사용하여 SenderName, Subjectbody를 인쇄할 수 있습니다.

이메일이 Outlook 응용 프로그램과 연결되어 있는지 확인하십시오.

print(Msg.SenderName)
print(Msg.Subject)
print(Msg.body)

속성으로 이메일 필터링

이제 SenderName, Subject, 등과 같은 메일 메시지 속성을 선택하여 이메일을 필터링하는 방법을 살펴보겠습니다. Outlook 애플리케이션에서 GetLast() 메서드를 사용하여 최신 이메일을 읽는 방법을 살펴보았습니다.

또한 Outlook 응용 프로그램에서 최신 및 가장 오래된 이메일을 추출하는 방법도 살펴보겠습니다. 우리는 Outlook의 인스턴스를 만드는 방법을 배웠으므로 다음 코드에 익숙할 뿐만 아니라 메모리에 Outlook을 로드하고 있음을 의미합니다.

import win32com.client as client

My_OL_App = client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
# MY_Inbox=My_OL_App.GetDefaultFolder(6)
MY_Inbox = My_OL_App.Folders("your email@gmail.com").Folders(
    "Inbox"
)  # When you two or multiple mail boxes
MY_ib_items = MY_Inbox.Items

두 개의 서로 다른 사서함이 있을 수 있으므로 여러 Outlook 사서함을 읽으려는 경우 변수에 로드할 사서함과 폴더를 정의할 수 있습니다. 위의 코드는 이 코드 줄 대신 동일합니다. 사서함이 하나만 있는 경우 다음 코드를 입력할 필요가 없습니다.

MY_Inbox = My_OL_App.Folders("your email@gmail.com").Folders("Inbox")

Outlook 응용 프로그램에 연결된 관련 이메일 주소를 입력할 수 있습니다. 컬렉션이 될 Items 속성을 사용하여 모든 받은 편지함 항목을 추출할 수 있으며 이러한 항목을 하나씩 반복할 수 있습니다.

이러한 항목을 반복할 때 메일함에서 이메일을 하나씩 로드합니다. 제목 속성을 사용하여 이메일을 필터링하고 루프는 받은 편지함을 반복한 다음 이메일 제목이 일치하는지 확인합니다.

for msg in MY_ib_items:
    if "n case you're wondering what's going on" in str(msg.Subject):
        print(msg.SenderName)
        print(msg.Subject)
        print(msg.body)

다음과 같은 다양한 속성을 사용하여 이메일을 필터링할 수 있습니다. SenderEmailAddressSenderName 또는 단일 if 문에서 여러 속성이 있는 조건을 정의할 수 있습니다.

if (
    "n case you're wondering what's going on" in str(msg.Subject)
    and msg.SenderEmailAddress == "emailaddress"
):
    pass

ReceivedTime이라는 속성이 하나 더 있으므로 이 이메일이 수신된 날짜와 시간을 사용하여 이메일을 필터링하려는 경우 이 속성을 사용할 수도 있습니다. 더 많은 솔루션을 보려면 여기(https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook.mailitem?redirectedfrom=MSDN&view=outlook-pia#properties “LCO”)에서 더 많은 속성을 찾아보고 여기(https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook.mailitem?redirectedfrom=MSDN&view=outlook-pia#properties “LCO”)를 방문하세요.

완전한 소스 코드:

# import win32com.client as client

# My_OL_App = client.Dispatch('Outlook.Application').GetNameSpace('MAPI')
# MY_Inbox=My_OL_App.GetDefaultFolder(6)

# MY_ib_items=MY_Inbox.Items
# Msg=MY_ib_items.GetLast()

# print(Msg.SenderName)
# print(Msg.Subject)
# print(Msg.body)

# Filter Emails With Properties

import win32com.client as client

My_OL_App = client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
MY_Inbox = My_OL_App.GetDefaultFolder(6)
MY_Inbox = My_OL_App.Folders("your email@gmail.com").Folders(
    "Inbox"
)  # When you two or multiple mail boxes
MY_ib_items = MY_Inbox.Items

for msg in MY_ib_items:
    if "n case you're wondering what's going on" in str(msg.Subject):
        print(msg.SenderName)
        print(msg.Subject)
        print(msg.body)
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn