morikomorou’s blog

自分が学んだことなどの備忘録的なやつ

【python】Outlookでメールを自動作成、自動送信する方法(Windows)


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にしておきます。

終わりに

これでテレワーク開始時の苦痛とはおさらばできましたね。最近業務効率化にはまってきました。