outlookのメール作成から送信まで自動で行う方法について解説します
はじめに
会社でのメールはoutlookを使っている方が多いのではないでしょうか?私の会社もoutlookを使っており、割とoutlookをいじる機会が多いです。こういうところから業務効率化を図っていきましょう。
例えば、うちの部署ではテレワークの開始時や終了時に上司にメールで一報を入れる必要があります。そういった無駄な繰り返しの作業を自動化してみます。
会社ではWin10のパソコンでMicrosoft365のOutlookデスクトップアプリを使用していますのでそれで動くようにプログラム作ります。
Outlookメールを作成する
windowsPCで、pythonを使ってoutlookを操作するにはwin32comというライブラリを使用します。pythonインストール時に勝手にインストールされてるのですぐ使えます。早速やってみます。
まずはメールオブジェクトを新規で作成しましょう
import win32com.client outlook = win32com.client.Dispatch("Outlook.Application") # outlookのアプリケーションオブジェクトを作成 mail = outlook.CreateItem(0) # メールを新規作成
outlookのアプリケーションオブジェクトのメソッドにCreateItem()というものがありこれでMicrosoft Outlook の各種オブジェクトを新規作成できます。
この引数には数字を入れます。0はメールオブジェクトです。他は以下に示しますが、予定やタスク、連絡先等のオブジェクトも作成できます。
名前 | 値 | 説明 |
olAppointmentItem | 1 | AppointmentItem オブジェクト。 |
olContactItem | 2 | ContactItem オブジェクト。 |
olDistributionListItem | 7 | DistListItem オブジェクト。 |
olJournalItem | 4 | JournalItem オブジェクト。 |
olMailItem | 0 | MailItem オブジェクト。 |
olNoteItem | 5 | NoteItem オブジェクト。 |
olPostItem | 6 | PostItem オブジェクト。 |
olTaskItem | 3 | TaskItem オブジェクト。 |
pythonでoutlookを使うためのドキュメントは全然見つけられませんが、基本的にはVBAです。VBAの公式ドキュメントは以下にあるのでこれを参考にします。
続いてメールの本文や宛先を指定していきましょう。
メールオブジェクトに関しては以下に使い方が載ってます。
mail.to = 'aaa@aaa.com; bbb@bbb.com' # 宛先の設定 mail.cc = 'ccc@ccc.com; ddd@ddd.com; eee@eee.com' # ccの設定 mail.bcc = 'fff@fff.com' # bccの設定 mail.subject = '例の件' # 件名の設定 mail.bodyFormat = 2 # 本文の形式の指定 mail.Attachments.Add('./test.txt') # 添付ファイルの添付 mail.body = '''こんにちは。 そして、さようなら''' # 本文 mail.display(True) #メール画面を開く
実行するとoutlookで上記の情報がすべて入力された新規メールのウィンドウが立ち上がります。
mail.bodyFormatプロパティには、本文の形式に対応する数字を入れます。今回入力した2はHTML形式のメールです。他のオプションは下記です。
名前 | 値 | 説明 |
olFormatHTML | 2 | HTML 形式 |
olFormatPlain | 1 | テキスト形式 |
olFormatRichText | 3 | リッチ テキスト形式 |
olFormatUnspecified | 0 | 形式の指定なし |
最後のmail.display(True)を入れてるのは確認のためです。自動で送信する場合は必要なくて、以下に変更しておけば自動で送信まで行います。簡単ですね。
mail.Send()
テレワーク開始メールを自動送付する
それでは先ほど説明したことを盛り込んで、テレワーク開始用にメールを自動作成、送付するプログラムを作成してみましょう。
import datetime import win32com.client # 現在の時間を取得 now = datetime.datetime.now().strftime('%H:%M') outlook = win32com.client.Dispatch("Outlook.Application") # outlookのアプリケーションオブジェクトを作成 mail = outlook.CreateItem(0) # メールを新規作成 mail.to = 'aaa@aaa.com' # 宛先の設定 mail.cc = 'ccc@ccc.com' # ccの設定 mail.subject = '例の件' # 件名の設定 mail.bodyFormat = 2 # 本文の形式の指定 mail.body = '''上司 様 おはようございます、私です。 本日はテレワークを行わせていただきます。 {} より業務開始します。 よろしくお願いいたします。'''.format(now) mail.Send()
開始時間も一緒に送付できるようにしておきました。これをバッチ処理とかにしておけばワンクリックで送信できます。
pythonコードを実行するバッチファイルを作成する
バッチファイルを作ってpythonコードを実行できるようにしておくと、クリックするだけでコードが実行されすごく楽です。
テレワーク開始.batみたいな名前のバッチファイルを新規で作成しておきます。
バッチファイルでpythonのコードを実行する場合は、バッチファイルに以下のように記載します。
cd 実行したいpyファイルがあるフォルダのパス python 実行したいpyファイル
これはanacondaじゃなくて、普通にpythonをインストールして環境設定でパスを通した状態を前提としています。
anacondaの場合はこんな感じになります
cd 実行したいpyファイルがあるフォルダのパス call C:\Users\ユーザー\Anaconda3\Scripts\activate.bat call activate 仮想環境名 python 実行したいpyファイル
上記のbatファイルをデスクトップにおいてダブルクリックするとコードが実行されて自動でメール送信ができるというわけです。
batファイルについての注意点ですが、パスの中に日本語のフォルダが入ってると文字化けしてうまく実行できない場合があります。
その場合はメモ帳で保存時にshift-jisでエンコードすることでうまくいきます。
名前を付けて保存のところで文字コードが選べるのでANSIにしておきます。
終わりに
これでテレワーク開始時の苦痛とはおさらばできましたね。最近業務効率化にはまってきました。