[Python] 파이썬으로 아웃룩(Outlook) 이메일 보내기
- 자아실현/파이썬
- 2020. 11. 29.
1. 개요
파이썬을 이용하여 아웃룩(Outlook)으로 이메일을 발송합니다.
win32com 모듈로 Outlook Object Model을 이용합니다.
Outlook MailItem Object
new_Mail이라는 변수에 새로운 이메일을 오브젝트 형태로 불러옵니다.
이 오브젝트를 이용하여 메일을 작성하고 보냅니다.
new_Mail = win32com.client.Dispatch("Outlook.Application").CreateItem(0)
사용하는 프로퍼티
- new_Mail.To : 메일 수신자
- new_Mail.CC : 참조
- new_Mail.Subject : 메일 제목
- new_Mail.HTMLBody : 메일 내용(HTML 형태)
- new_Mail.Attachment : 첨부 파일 -> Attachment 또한 Object라, 여기서는 new_Mail.Attachment.Add(파일경로) 형태의 첨부 파일 추가 메서드 사용
사용하는 메서드
- new_Mail.Send() : 메일 발송하기
※ MailItem의 모든 프로퍼티와 메서드는 아래 링크에서 확인 가능합니다.
docs.microsoft.com/ko-kr/dotnet/api/microsoft.office.interop.outlook._mailitem?view=outlook-pia
2. 예제 코드
outlook.py
# -*- coding: utf-8 -*-
import win32com.client
def send_mail(to,subject,content, atch=[]):
# Outlook Object Model 불러오기
new_Mail = win32com.client.Dispatch("Outlook.Application").CreateItem(0)
# 메일 수신자
new_Mail.To = to
# 메일 참조
# new_Mail.CC = "mail-add-for-cc@testadd.com"
# 메일 제목
new_Mail.Subject = subject
# 메일 내용
new_Mail.HTMLBody = content
# 첨부파일 추가
if atch:
for file in atch:
new_Mail.Attachments.Add(file)
# 메일 발송
new_Mail.Send()
if __name__ == "__main__":
to = "mail-add-for-to@testadd.com"
subject = "test"
content = """
<h3>직장인 최고의 일상 루틴, ‘출근과 퇴근’</h3>
<blockquote><p>아니, 작가님은 참 대단하세요. 직장을 다니면서 어떻게 그렇게 글을 쓰세요?</p></blockquote>
<p>단언컨대, 나는 참 게으른 사람이다. 시간이 많이 주어질 때 오히려 글쓰기를 하지 않고 늘어져 있다. 서 있으면 앉고 싶고, 앉으면 눕고 싶고, 누우면 자고 싶은 본능을 충실히 따른다. 그래서 나에게 대단하다는 말을 건네는 분들에겐 일종의 미안함을 느낀다.</p>
출처 : https://ppss.kr/archives/228582?fbclid=IwAR3Jk7GFK_-Urf3FQW6W_QY1Ht8LEv5kn5gzto-nh3RXKmnB9IZDiK8LfDg
"""
send_mail(to, subject, content)
위의 코드를 실행하면, 아래와 같은 이메일이 발송됩니다.
3. 참고 사항
- 아웃룩은 메일 내용이 기본적으로 HTML로 작성된다. 따라서 원하는 대로 HTML을 이용하여 메일 내용을 작성하면 된다.
- 느낀점 : 이게 클래스로 만들어서 사용할 수 있으면 편할텐데, 해당 오브젝트를 상속받아 클래스로 사용하는 데에는 실패하였다. 현재로서는 파일 하나로 만들어 놓고 모듈로 이용하는 게 그나마 편한 것 같다. 다시 말해서 위의 코드가 있는 파일을 outlook.py라고 한다면, 다른 파일에서 해당 함수를 불러와서 사용하는 방식으로 이용한다.
main.py
# -*- coding: utf-8 -*-
from outlook import send_mail
from datetime import datetime
to = "test_add@fakeweb.com"
subject = datetime.today().strftime("%y.%m.%d")
content = """
테스트 이메일
"""
send_mail(to, subject, content)
- 다음 시간에는 SAP 이용해서 다운받아서 메일 보내는 것까지 한방에 다루려고 한다.
- 그 다음에는 SAP로 다운받은 엑셀 파일을 처리하여 메일로 보내는 것까지 한방에 다루고 싶다.