(更新日:2022/01/19)
面倒な定型メールの送信を自動化する仕組みです。メールテンプレートを作っておけば、あとは定時になるとPCが勝手にメール送信してくれます。繰り返し同じ動作をするので、「毎日このメール作成するの面倒なんだよな。」という方にピッタリの内容です。また、自分に向けたリマインドメールに使うのもありと思います。今回はWindowsユーザー向けに記事を書いています。Windowsタスクスケジューラ-、Python、Excel、Outlookを連携させ、毎日のルーティーンワークから、解放されましょう!
想定読者
「毎日、毎日、同じようなメール作成にうんざりしてるよ。」という方。
「PC作業自動化=RPA(Robotic Process Automation)に興味あるよ!」という方。
やり方
Pythonインストール
まず初めに、Pythonをまだインストールしていない方は、
こちらからAnacondaと呼ばれるパッケージごとインストールしてください。
この中に、Python.exeを始め、必要なものがだいたいそろっています。
今回ご紹介するPythonコードは、OS環境が同じであれば、
基本コピペで動作すると思います。
私も勉強中なので、心配しないでください。(汗
ちなみに私のOSは、
Windows10, 64bitです。
今回作成するプログラムの詳しい手順については、
こちらの動画を参考にしました。
なお、プログラムの使用については、あくまで自己責任でお願いします。
Pythonプログラムのコーディングには、
Python用の統合開発環境(IDLEと略記:Integrated DeveLopment Environment)
というものを使いました。
システム全体像
メール自動送信システムへの登場人物は、
Windowsタスクスケジューラ-、Python、Excel、Outlookです。
全体フローは以下の通りです。
- Windowsタスクスケジューラ-で、定時にPythonファイル実行するタスクを作成
- Pythonファイル実行
- Excelファイルに記載した宛先、内容、添付ファイルの読み込み
- Outlook起動・メール送信
Pythonプログラム
さっそく、Pythonコードの全体像です。
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 34 35 36 37 38 39 |
# coding: utf-8 import win32com.client import openpyxl file_path = r"C:\Users\owner\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-4, max_col=7): db=[] for c in rows: if c.value is None: c.value="" db.append(c.value) bigdb.append(db) print(db) outlook = win32com.client.Dispatch("Outlook.Application") mail = outlook.CreateItem(0) for i in range (len(bigdb)): mail = outlook.CreateItem(0) mail.bodyFormat = 2 #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() |
Excelファイル(宛先・内容管理)
メールの宛先や内容を記載するExcelファイルは、こんな感じです。
参考にしてください。
プログラム実行
さきほどのPythonプログラムと、宛先管理Excelを同じフォルダに格納し、
えいやっと、作成したPythonプログラムをとりあえず実行してみましたが、
早速エラー発生です。
エラー内容は以下。
1 2 3 4 |
Traceback (most recent call last): File "C:\Users\owner\Python\Outlook\Outlook.py", line 4, in <module> import win32com.client ModuleNotFoundError: No module named 'win32com' |
[win32com]なんていうモジュールは見つかんないよ。と言っています。
[Windows]ボタンを押し、検索窓に[cmd]と入力します。
コマンドプロンプトが検索されるので、[Enter]キーで起動します。
コマンドプロンプトが立ち上がったら、[pip install pywin32] を実行し、
Excel操作に必要なライブラリ[pywin32]をインストールします。
Windowsの機能をPythonから操作するためのアクセス権=APIs を
取得するというわけです。
再度、Pythonプログラムを実行します。
しかし、ここで再びエラー発生。
1 2 3 4 5 6 |
Traceback (most recent call last): File "C:\Users\owner\Python\Outlook\Outlook.py", line 4, in <module> import win32com.client File "C:\Users\owner\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\__init__.py", line 5, in <module> import win32api, sys, os ModuleNotFoundError: No module named 'win32api' |
どうやら、[win32api]が見当たらないようです。
しょうがないので、win32apiの大元を探しに行きます。
以下のサイトに [pywin32] の最新版がありました。
Pythonのバージョンごとに、異なるファイルをダウンロードする必要があります。
https://github.com/mhammond/pywin32/releases
そこで、コマンドプロンプトから、使用しているPythonのバージョンを確認します。
python –version と入力して Enter キーを押します。
C:\Users\owner>python –version
Python 3.9.4
Python 3.9.4みたいですね。
pywin32-303.win32-py3.9.exe をダウンロードしてみます。
詳細情報をクリック。
実行をクリック。
突き進んでいきます。
インストーラーが起動したところで結局はじかれました。
32bit版のインストーラーをダウンロードしていたのがNGみたいです。
どうやら、pythonのバージョンだけでなく、
自分が使っているPythonのbit数に合ったインストーラーでないと、
使用できないようです。
私の場合は、Python 3.9.4, 64bit版だったので、
32bit版のインストーラーはNGでした。
気を取り直して、こちらのサイトから、64bit版
pywin32-303.win-amd64-py3.9.exe をインストールします。
再度、Pythonプログラムを実行しました。
また同じようなエラーが出ます。
1 2 3 4 5 6 |
Traceback (most recent call last): File "C:\Users\owner\Python\Outlook\Outlook.py", line 4, in <module> import win32com.client File "C:\Users\owner\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\__init__.py", line 5, in <module> import win32api, sys, os ModuleNotFoundError: No module named 'win32api' |
なんだか良く分からないのですが、
とりあえず、エラーログの内容でGoogle検索してみると、
このサイトに同じようなエラーが投稿されていました。
中身を見てると、どうやらOSの再起動が必要みたいです。
再起動してみます。
もう一度、Pythonプログラムを実行します。
1 2 3 4 5 |
=============== RESTART: C:\Users\owner\Python\Outlook\Outlook.py ============== Traceback (most recent call last): File "C:\Users\owner\Python\Outlook\Outlook.py", line 5, in <module> import openpyxl ModuleNotFoundError: No module named 'openpyxl' |
今度は別のエラーが出ました。
「openpyxl」というライブラリが無いよ。という内容です。
そこで、コマンドプロンプトを再度起動し、
[pip install openpyxl]で[openpyxl]をインストールします。
C:\Users\owner>pip install openpyxl
Collecting openpyxl
Using cached openpyxl-3.0.9-py2.py3-none-any.whl (242 kB)
Collecting et-xmlfile
Using cached et_xmlfile-1.1.0-py3-none-any.whl (4.7 kB)
Installing collected packages: et-xmlfile, openpyxl
Successfully installed et-xmlfile-1.1.0 openpyxl-3.0.9
WARNING: You are using pip version 20.2.3; however, version 21.3.1 is available.
You should consider upgrading via the ‘c:\users\owner\appdata\local\programs\python\python39\python.exe -m pip install –upgrade pip’ command.
こんな結果が表示されます。
でもって、再度Pythonプログラムを実行します。
・・・・・・・・
・・・・・・・・
・・・・・・・・
Outlookにメールが届きました!
成功です。
タスクスケジューラ-の設定
あとはタスクスケジューラ-で、定時にこのPythonプログラムを実行する
タスクを作成していきます。
タスクスケジューラ-の使い方は、こちらの動画を参考にしました。
タスクスケジューラ-でのタスク設定は、
そんなに難しくないので、ここまでこれば自動化完成です!
まとめ
いかがでしたでしょうか?
やや登場人物が多いですが、毎日のメール作成の手間が減りますし、
いろいろと応用も聞きそうな仕組みなので、ぜひ自分なりにアレンジしてみてください。
また、こちらの記事も参考にしてみてください。
「誕生日AM0時ピッタリにお祝いメッセージをグループLINEに自動送信する方法」
ではでは!