【業務自動化】チャプター3-5:メール送信を自動化しよう

一つ前のページでは 残業集計ツール を作成しました。
今回は メール送信の自動化 を行いましょう。
Chapter1:PythonでExcelを操作しよう
Chapter2:PyInstallerで自動化ツールを(.exe)作ろう
Chapter3:便利な自動化ツールを5つ作ろう
・Chapter3-1:Excelファイルをフォルダ丸ごと結合しよう
・Chapter3-2:テンプレートを使った請求書自動作成
・Chapter3-3:グラフ付き売上レポート自動生成ツールを作ろう
・Chapter3-4:勤怠の丸め・残業集計自動化ツールを作ろう
・Chapter3-5:メール送信を自動化しよう ◁今回はここ
Chapter4:Webスクレイピング入門
Chapter5:自動化ツールを作って稼ごう
Excel にまとまったアドレス帳をもとに、一括でメールを送れる仕組みをPythonで作成してみましょう。
もちろん、それは一般のメールソフトにもできる基本的な機能です。しかし、Pythonで自動化することで以下のようなメリットが生まれます。
- 社内の定型報告や請求書送付を定期的に自動送信できる
- Webスクレイピング(Chapter4で学習)と組み合わせて、ネット上の情報を自動収集 ⇒ 自動送信できる
- Excelにある顧客リストから自動で宛先を読み込み、本文を個別にカスタマイズした上で自動送信
本記事で紹介するコードはただの「メールの一括送信ツール」です。これだけではそれほど価値はありません。
しかしこれをベースとして拡張していくことで、実務に役立つ強力な仕組みに発展させられるのが最大の価値です。
本記事は前半は無料。後半は会員向けの有料記事です。
業務自動化の全ての記事セットが今だけ 1980円 ⇒ 980円。
どこよりも安いこの教材を、是非ご活用下さい^^
- もくじ
-
青字は無料部分。白字は会員向け部分です。
- Pythonでメール送信を自動化する仕組み
- メール配信の仕組みと流れ
- SMTPとは|Pythonのsmtplibでサーバーへ送信する基本
- MIMETextとは|テキスト/HTML本文と文字エンコードの基礎
- サンプルスクリプト|openpyxlでExcel→SMTP送信
- このサンプルで実現できること
- 送信リストExcelの自動生成スクリプト
- ダミーSMTPサーバーの起動|aiosmtpdで安全に送信テスト
- サンプルスクリプト|MIMETextで本文生成し一斉送信
- 実運用への応用方法|本番SMTP・Gmail連携・認証の注意点
- 本番でメールを送るには|SMTPサーバー設定とポート/暗号化
- Gmailのアプリパスワードについて
- まとめ|メール送信自動化を使いこなそう
どこよりも安いこの教材を、是非ご活用下さい。
- Pythonでメール送信を自動化する仕組み
Pythonでメール送信を自動化する仕組み
Pythonでメールを送るときには、メールソフトを使うわけではなく「プログラムが直接メールサーバーに接続して送信」します。
そのため単純なコマンドだけで済むわけではなく、メールの仕組みや通信のルールをある程度知っておく必要があります。
ここからは、Pythonでのメール送信に必要な基本要素を順に解説します。
まずは「メールの仕組み」「SMTP」「MIMEText」といったキーワードを押さえていきましょう。


メール配信の仕組みと流れ
普段私たちが使っているメールは、Gmail や Outlook などのアプリを通じて送受信しています。
しかし、アプリが直接相手に届けているわけではなく、必ず「メールサーバー」を介してやり取りが行われます。
送信の流れをシンプルに表すと、次のようになります。
- 送信者が書いたメールを、まず自分が利用する送信サーバーに渡す
- サーバー同士がやり取りをして、宛先の受信サーバーへ転送する
- 受信サーバーに保存されたメールを、受信者が自分のアプリから読み込む
この仕組みを理解しておくと、Pythonでメールを送るときに「プログラムがどの役割を担うのか」が見えてきます。
つまり、Pythonは送信者の代わりに 送信サーバーへ接続してメールを託す 役割を果たします。
SMTPとは|Pythonのsmtplibでサーバーへ送信する基本
SMTP(Simple Mail Transfer Protocol)は、インターネット上でメールを送信するための基本的な通信規格です。
私たちがGmailやOutlookで送ったメールも、裏側では必ずSMTPのルールに従ってサーバーに届けられています。
Pythonでメールを自動送信する際も、プログラムがSMTPサーバーに接続して「誰から誰へ」「件名は何か」「本文はどんな内容か」を指示する必要があります。
そのために使うのが、標準ライブラリに含まれる smtplib です。
今回のサンプルコードでは学習用として、外部にメールを送信するのではなく ローカル環境で起動したダミーSMTPサーバー に接続する仕組みを採用しています。
これにより誤って本物のメールを送ってしまう心配がなく、メールの送信処理を安全に試せます。
MIMETextとは|テキスト/HTML本文と文字エンコードの基礎
メールは単純に「文字列を送りつける」だけでは成立しません。
送信者や宛先、件名、本文といった複数の情報をひとつの「メールメッセージ」として組み立てる必要があります。
そのために利用されるのが MIME(Multipurpose Internet Mail Extensions) という仕組みです。
Pythonでは、標準ライブラリの email.mime.text.MIMETextクラス を使うことで、本文をメール形式に整形できます。これを利用すると:
- 本文の文字コード(例:UTF-8)を指定できる
- 本文の種類(プレーンテキストかHTMLか)を選べる
- サーバーが理解できる「正式なメール構造」として扱える
今回紹介するサンプルコードでは MIMEText(body, "plain", "utf-8") という形で呼び出し、Excelから読み込んだ本文を プレーンテキスト形式 でメールメッセージに変換しています。
こうすることで、件名や送信元と組み合わせた「完成したメール」としてサーバーに渡せるようになります。

サンプルスクリプト|openpyxlでExcel→SMTP送信
メール送信自動化のサンプルスクリプトを紹介します。
このサンプルで実現できること
ここからは実際にコードを動かしながら、Excelに記載した宛先リストをもとにメールをまとめて送信する仕組みを学んでいきます。
今回用意しているサンプルスクリプトは、次のような流れで処理を行います。
- Excelファイルから宛先・件名・本文を読み込む
→ 1行目はヘッダー、2行目以降をデータとして扱います。 - メールメッセージを組み立てる
→MIMETextを利用して本文をメール形式に整形し、件名や宛先を追加します。 - SMTPサーバーに接続してメールを送信する
→ 学習用のダミーサーバーに送信し、ターミナルに内容を表示させます。
つまり、このサンプルコードを動かすことで「Excelのリストをもとにメールをまとめて処理する」一連の流れを確認できます。
実際の業務にそのまま使うのではなく、仕組みを理解するための最小限のモデルケースだと考えてください。
すでに購入済みの方はこちら


