今回はPythonでOutlookを操作して、メールの作成、自動送信や予定表の追加をやっていきます。
Pythonでやる理由は特にないです。VBAでもできますが、Pythonの方がかっこいいので、今回はPythonで実装していきます。
PythonでOutlookを使ってメールを送る

Excelにメール宛先と添付ファイルの場所をまとめておいて、Pythonを起動するとそのファイルを読んでOutlookでメールを送信するという流れです。
- Excelにアドレスをまとめる
- Pythonを起動
- Outlookでメールを自動送信
では実際にコードを見ていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | import win32com.client import openpyxl file_path = r"E:\プログラミング\python\outlook\atesaki.xlsx" wb = openpyxl.load_workbook(file_path) ws = wb['atesaki'] max=ws.max_row bigdb=[] for rows in ws.iter_rows(min_row=5, min_col=2, max_row=max, max_col=7): db=[] for c in rows: if c.value is None: c.value="" db.append(c.value) bigdb.append(db) outlook = win32com.client.Dispatch("Outlook.Application") mail = outlook.CreateItem(0) for i in range (len(bigdb)): mail = outlook.CreateItem(0) mail.bodyFormat = 1#1:テキスト 2:HTML 3:リッチテキスト mail.to = bigdb[i][0] mail.cc = bigdb[i][1] mail.bcc = bigdb[i][2] mail.subject = bigdb[i][3] mail.body = bigdb[i][4] if bigdb[i][5] != "": mail.Attachments.Add (bigdb[i][5]) mail.Send() |
たったこれだけでPythonでメールを自動で送れちゃいます。
コードの解説をしていきます。
PythonでOutlookのメールを送る解説
1 2 3 4 5 6 | import win32com.client import openpyxl file_path = r"E:\プログラミング\python\outlook\atesaki.xlsx" wb = openpyxl.load_workbook(file_path) ws = wb['atesaki'] |
今回はOutlookを操作するwin32comとExcelを操作するopenpyxlをインポートしています。
file_pathでメール宛先がまとまっているExcelの場所をしています。ここは各自のパスに変更してください。
ws=でメール宛先がまとまっているシートの名前を指定します。ここがsheet1だったらそのように変更してください。
1 2 3 4 5 6 7 8 9 10 | max=ws.max_row bigdb=[] for rows in ws.iter_rows(min_row=5, min_col=2, max_row=max, max_col=7): db=[] for c in rows: if c.value is None: c.value="" db.append(c.value) bigdb.append(db) |
ここでExcelの情報をリスト化しています。
min_rowとmin_colはそれぞれメール宛先の最初の行列を指定しているので、各自の行列スタートの数字にかえてください。
max_colは一番右端の列を指定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | outlook = win32com.client.Dispatch("Outlook.Application") mail = outlook.CreateItem(0) for i in range (len(bigdb)): mail = outlook.CreateItem(0) mail.bodyFormat = 1#1:テキスト 2:HTML 3:リッチテキスト mail.to = bigdb[i][0] mail.cc = bigdb[i][1] mail.bcc = bigdb[i][2] mail.subject = bigdb[i][3] mail.body = bigdb[i][4] if bigdb[i][5] != "": mail.Attachments.Add (bigdb[i][5]) mail.Send() |
ここでは先ほどリスト化したデータを元にメールを作成していってます。
メールのそれぞれの要素に適切な情報を渡しています。
最後のmail.Send()でメールが実際に送られます。
これだけでPythonでメールを自動で送ることができます。
では次からはPythonでOutlookの予定表を追加する方法を紹介していきます。
PythonでOutlookの他人の予定表(スケジュール)に予定を追加する方法
Pythonを使って他人の予定表に予定を追加する方法も簡単で早速コードを紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import win32com.client outlook = win32com.client.Dispatch("Outlook.Application") sche = outlook.CreateItem(1) #予定表 sche.Start = "2021-9-28 10:00" # yyyy-MM-dd hh:mm sche.Subject = "定例会議"#件名 sche.Body = '参加よろ'#本文 sche.Duration = 60 #会議時間(分数) sche.Location = "会議室201"#場所 sche.MeetingStatus = 1 sche.Recipients.Add("メルアド@***.com") #参加者 sche.Send() |
今回は色んな人に予定を追加する方法ではなく、単発で予定を追加する方法を紹介しています。(複数追加の検証が面倒くさかっただけです)
ほとんどメールを作る時の方法と一緒で違うところは↓の部分だけです。
1 | che.Recipients.Add("メルアド@***.com") #参加者 |
この一文で他人の予定表に予定を追加することができます。
このコードでは特定の人の予定しか追加できませんが、メールの時のようにエクセルにチームメンバーとかをまとめておけば、すぐに一気に予定を追加することが可能になります。