mailmail

xy_outlook(기초) - xy_outlook에대한 기본적인 사항들

작성자
sjpark
작성일
2025-03-29 18:09
조회
9

xy_outlook에 대하여

메일을 관리하는 outlook을 좀더 편하게 사용하기 쉽도록 만든 모듈입니다. 이 모듈은 xython의 기본 개념인 함수형으로 만들어졌으며, 주요 함수들을 사용하면서 outlook을 쉽게 사용하도록 하는 목적입니다

밑에도 설명을 하겠지만, 전반적으로 먼저 알고있으면 좋을 부분을 나열하여 드립니다
  • 폴더에 파일이 저장되듯이 메일은 같은 방식으로 저장됩니다
  • top폴더와 대비하여 sub-folder 와 folder라는 이름은 가끔 혼용하여 사용됩니다
  • 기본폴더는 “”를 사용하면 받은 편지함이 됩니다
  • 날짜에 대한 기준은 00시00분 ~ 23시59분까지의 기간이다
  • 메일의 집합형은 lsit형태가 아니다
  • 삭제를 한다면 끝에서부터해야 문제가 안생긴다
  • 새로운메일을 위한 table형식은 util의 make_table을 사용하기 바랍니다

메일 객체의 묶음에 대한 설명

1개 메일 객체 <class 'win32com.client.CDispatch'> 그리고 메일객체를 print를 하면 class에 정의가 된 것이 메일의 제목을 나타내도록 한 것 같습니다.
mail_set[0:2]와같이 사용이 불가능, 그래서 list(mail_set)[0:2]으로 사용하여야 합니다
여러 개의 메일 묶음 <COMObject Restrict>
그러나 개인적으로 확인을 거치면서 찾은 각 메일을 기본묶음의 형태로 만들수는 없으므로, List에 넣어서 return객체로 돌려주는 형태를 만들었습니다

그래서 2가지의 묶음을 구분해서 적용하려고 합니다
여러 개의 메일 묶음 (기본객체) <COMObject Restrict> mail_set
사용자가 각 mail을 묶음으로 만든것 list객체 mail_list
mail_set= outlook.get_unread_mail_set_in_inbox_folder()
print("1. ", mail_set)
print("2. ", (mail_set))

for one_mail in list(mail_set)[0:2]:
print("3. ", type(one_mail))
print("4. ", one_mail)

word-image-2956-1.png

단, mail_set[0:2]과같이 기본 묶음객체는 slice가 불가능하므로 list로 변경을 해서 사용하면 가능합니다

메일객체의 method와 속성

자주 사용하는 속성에 대해서 설명드리면 아래와 같습니다
속성
Application Outlook 애플리케이션 객체를 반환
Attachments 메일에 첨부된 파일 컬렉션을 반환
BCC 숨은참조
Body 내용
Categories 메일 항목에 할당된 범주 목록
CC 참조
Class Outlook 항목의 클래스
Companies 메일 항목과 연결된 회사이름
ConversationID 메일 대화의 ID
ConversationTopic 대화 주제
CreationTime 만든시간
DeferredDeliveryTime 메일 배달 지연 시간을 반환하거나 설정
4501-01-01 00:00:00+00:00 (실제 메일의 예)
EntryID 고유한 id
ExpiryTime 4501-01-01 00:00:00+00:00 (실제 메일의 예)
FormDescription 메일 항목에 사용된 양식에 대한 설명
Importance 메일 중요도 (높음, 보통, 낮음)
IsConflict 메일 항목이 충돌하는지 여부
IsMarkedAsTask 메일 항목이 작업으로 표시되었는지의 여부
LastModificationTime 메일 항목이 마지막으로 수정된 시간
MarkForDownload 메일 항목의 다운로드 표시 상태
MessageClass 메일 항목의 메시지 클래스
Mileage 메일 항목의 마일리지 정보
NoAging 메일 항목이 자동 보관 대상에서 제외되는지의 여부
OutlookInternalVersion Outlook 내부 버전 번호를 반환합니다.
OutlookVersion Outlook 버전을 반환합니다.
Parent 어느 편지함에 있는것인지(받은 편지함)
PropertyAccessor 메일 항목의 속성에 접근할 수 있는 PropertyAccessor 객체를 반환합니다.
ReceivedTime 받은시간
Recipients 받는 사람 목록
RemoteStatus 메일 항목의 원격 상태
ReplyRecipients 메일 항목에 대한 회신 받는 사람 목록
SaveSentMessageFolder 보낸 메시지를 저장할 폴더
Sender 보낸사람
SenderEmailAddress 보낸 사람의 이메일 주소
SenderEmailType 보낸 사람의 이메일 주소 유형
SenderName 보낸사람
Sensitivity 메일 보안 수준 (일반, 개인, 비공개, 기밀)
Sent 보냈는지 아닌지
SentOn 보낸 날짜 및 시간
Size 메일 크기 (바이트)
Subject 제목
TaskCompletedDate 작업 완료 날짜
TaskDueDate 작업 기한
TaskStartDate 작업 시작 날짜
To 받는 사람
UnRead 메일 읽음 여부 (True: 읽지 않음, False: 읽음)
UserProperties 메일 항목의 사용자 정의 속성 컬렉션을 반환
method
AddBusinessCard
ClearConversationIndex
ClearTaskFlag
Close
Copy
Delete
Display
Forward
GetConversation
MarkAsTask
Move
PrintOut
Reply
ReplyAll
Save
SaveAs
Send
ShowCategoriesDialog
하기의 코드를 사용하면, 현재 받은메일함중에서 읽지않은 첫번째 메일에 대한 속성들을 볼수있읍니다

all_property = ['Actions', 'AlternateRecipientAllowed', 'Application', 'Attachments', 'AutoForwarded',
'AutoResolvedWinner', 'BCC', 'BillingInformation', 'Body', 'BodyFormat', 'Categories',
'CC', 'Class', 'Companies', 'Conflicts', 'ConversationID', 'ConversationIndex', 'ConversationTopic',
'CreationTime', 'DeferredDeliveryTime', 'DeleteAfterSubmit', 'DownloadState', 'EntryID',
'ExpiryTime', 'FlagRequest', 'FormDescription', 'GetInspector', 'HTMLBody', 'Importance',
'InternetCodepage', 'IsConflict', 'IsMarkedAsTask', 'ItemProperties', 'LastModificationTime',
'MarkForDownload', 'MessageClass', 'Mileage', 'NoAging', 'OriginatorDeliveryReportRequested',
'OutlookInternalVersion', 'OutlookVersion', 'Parent', 'Permission', 'PermissionService',
'PermissionTemplateGuid', 'PropertyAccessor', 'ReadReceiptRequested', 'ReceivedByEntryID',
'ReceivedByName', 'ReceivedOnBehalfOfEntryID', 'ReceivedOnBehalfOfName', 'ReceivedTime',
'RecipientReassignmentProhibited', 'Recipients', 'ReminderOverrideDefault', 'ReminderPlaySound',
'ReminderSet', 'ReminderSoundFile', 'ReminderTime', 'RemoteStatus', 'ReplyRecipientNames',
'ReplyRecipients', 'RetentionExpirationDate', 'RetentionPolicyName', 'RTFBody', 'Saved',
'SaveSentMessageFolder', 'Sender', 'SenderEmailAddress', 'SenderEmailType', 'SenderName',
'SendUsingAccount', 'Sensitivity', 'Sent', 'SentOn', 'SentOnBehalfOfName', 'Session',
'Size', 'Subject', 'Submitted', 'TaskCompletedDate', 'TaskDueDate', 'TaskStartDate',
'TaskSubject', 'To', 'ToDoTaskOrdinal', 'UnRead', 'UserProperties', 'VotingOptions', 'VotingResponse']


mail_set= outlook.get_unread_mail_set_in_inbox_folder()
one_mail = list(mail_set)[0]
for one in all_property:
try:
value = getattr(one_mail, one)
print(one, value)
except:
pass

기본 내용

메일의 특성상 외부로 보내지는 형태이기 때문에, 하나의 형태안에 관련된 내용들이 다 들어가야 합니다. 이런 형형태인 것 기본적으로 배경을 알고 배워보시면 됩니다

자동화를 위해서 아웃룩을 이용할때는 당연한 2가지를 알아야 합니다.
  1. 하나는 아웃룩의 기본적인 구조에 대한것과
  2. xy_outlook의 사용법을 알아야 합니다
간단하게 아웃룩의 기본구조를 보면,
  • 모든 메일을 mail item이라는 객체를 만들어서 저장이 됩니다
  • 단, mail item이외에도 약속을 나타내는 (promise용) 객체와 같은 것들이 사용됩니다
  • 모든 mail item은 고유한 번호를 가진다
  • mail item은 여러 폴더에 저장이 됩니다
xy_outlook은 함수로 이런 기능을 실현하는 것입니다

word-image-2956-2.png

아웃룩에서 하는 대부분의 자동화는 원하는 것을 골라내는 것부터 입니다

많은 부분에서 순서대로 갖고오거나 읽지 않은 것을 갖고오거나 우리가 원하는 목적에 맞는 것을 많은 것 안에서 갖고오는 것입니다

그런데, 처음에 들어온 곳에 그대로 있는 것이 아니라 이동이 되기 때문에 여러곳에서 찾아야하는기능들이 필요합니다

각 메일에는 많은 속성들이 있지만, 그중에서 원하는 부분들을 골라내고 찾아야 합니다

아웃룩의 구조

메일은 생각보다 간단한 구조를 갖고있는데, 상호간에 이동이 가능한 기능 때문에 폴더나 탐색 기능과 비슷하다라고 생각을 하셔도 됩니다

메일을 사용해보신분은 아시겠이지만지만, 보낸편지함, 받은편지함등의 이름을 가진 폴더로 구분을 하고, 각각의 폴더안에는 메일이 있는 것입니다

그리고 보관을 위하여, 별도의 공간이 따로있는데, 그림으로 나타내보면 아래와 같습니다

word-image-2956-3.png