Pythonで自動化!Outlookメールを自動送信する
- STMPサーバー?よく分からない…それを使わずにメールを自動送信する方法あるか?
win32com
モジュールを使ってOutlookを操作する
解説
Pythonでメール操作する方法をググるとstmplib
を使用する方法が多く出てくる。この方法はSTMPサーバーやパスワードを指定する必要があり、詳しくない人だとちょっと忌避感があるかもしれない。そこで、手軽に実現する方法としてwin32com
を使用する。サーバーとかパスワードの指定不要!
コードも簡単これだけ↓↓で、勝手にOutlookが立ち上がってメールが送信される。
from win32com import client outlook = client.Dispatch('Outlook.Application') new_email = outlook.CreateItem(0) new_email.BodyFormat = 1 new_email.To = '送信メールアドレス' new_email.Subject = 'タイトル' new_email.Body = '本文' new_email.Send()
Line 4
メールの書式設定を選択する。
1:テキスト 2:HTML 3:リッチテキスト
Line 5,6,7
必要事項をここにべた書きするか、変数でもよい。
Line 8
このタイミングでメールが送信される。動作確認したい場合は代わりにnew_email.Display(True)
を入れておく。送信前のメール画面が確認できる。
サンプルプログラム
毎日、朝9時と夕方18時に上司にメール連絡を入れるプログラムを作成した。リモートワークの勤怠管理のための定時連絡を自動化する、という想定。
- 朝9時に送信されるメール画面。キャプチャーするために
new_email.Display(True)
で送信しないように止めている。
- 夕方18時に送信されるメール画面。
ソースコード
# 36_EmailAutomatically_001.py # python 3.8.1 # schedule 0.6.0 # coding: utf-8 import time from win32com import client import schedule def makeEmail(set_subject, set_body): outlook = client.Dispatch('Outlook.Application') new_email = outlook.CreateItem(0) #フォーマットを指定する。1:テキスト 2:HTML 3:リッチテキスト new_email.BodyFormat = 1 #送信先メールアドレス new_email.To = 'test1@test.com; test2@test.com' new_email.CC = 'test3@test.com' #メールタイトル new_email.Subject = set_subject #メール本文 new_email.Body = set_body #メール送信実行 new_email.Display(True) #Outlookの新規メール画面が開くとこまで # new_email.Send() #問答無用で送信するモード def main(): #朝用の定型文 subj_morning = "[連絡]業務開始" body_morning = "〇〇さん\n業務開始します。\n□□" #夕方用の定型文 subj_afternoon = "[連絡]業務終了" body_afternoon = "〇〇さん\n業務終了します。\nお疲れさまでした。\n□□" #朝9時と、夕方18時にタイマーをセットする schedule.every().day.at("9:00").do(makeEmail, subj_morning, body_morning) schedule.every().day.at("18:00").do(makeEmail, subj_afternoon, body_afternoon) while True: schedule.run_pending() time.sleep(1) if __name__ == '__main__': main()