Pythonでメール作成・自動送信する

Pythonでメール作成・自動送信する
スポンサーリンク
スポンサーリンク

業務効率化・自動化の事例として、Pythonでメールを作成して、自動送信する方法を解説します。

フォルダを監視して変化があったらメールを送信したり、データがしきい値を超えたらメールを送るなど、様々な用途に応用ができると思います。

メール送信クライアントにGmailを利用する場合は、Gmailアカウントの作成とセキュリティ設定が必要になります。Gmailの設定を参考に事前に実施してください。

スポンサーリンク

使用モジュール

Pythonでメール作成と送信を行うにはPython標準モジュールの smtplib, email.mime.text を使用します。

ライブラリ :smtplib(公式ドキュメント
インストール:不要
ライブラリ :email.mime.text (公式ドキュメント
インストール:不要

smtplib は、SMTPプロトコルクライアントの機能を備えたモジュールです。 SMTPを利用することでメールの送受信が可能になります。

email.mime.text はMIMEオブジェクトを作成するために使用します。

MIMEとは「Multipurpose Internet Mail Extensions」の略で、規格上US-ASCIIのテキストしか使用できない電子メールで様々なフォーマットを扱えるようにする規格です。

このフォーマットに変換することで日本語を扱うことができるようになります。

Pythonでメールを作成して自動送信する

サンプルコードは以下のようになります。

ここではGmailを使用する方法を解説します。
GmailのSMTPサーバは「smtp.gmail.com」ポート番号は「587」を指定します。

会社のメールサーバを使用する場合は、SMTPサーバ情報を社内の環境に合わせて設定します。
PCログイン時にメールへもログインしている場合は、パスワードは設定せずに送信できるはずです。

プログラムを解説していきます。

PRG1: ライブラリ設定

SMTPでメールを送信するために smtplib 、MIME形式でメールを作成するために email.mime.textモジュールから MIMEText クラスをインポートします。

PRG2: メール情報の設定

from_email =’*****@gmail.com’
to_email = ‘宛先メールアドレス’
cc_mail = ”

from_email は送信元のGmailアドレスを設定します。
to_email には宛先のメールアドレスを指定します。cc_mail は不要であれば削除しても問題ありません。

mail_title = ‘メール件名’
message = ”’
ここにメール本文を記入
”’

mail_title にメールの件名、message にメール本文を設定します。

MIMEオブジェクトでメールを作成

msg = MIMEText(message, ‘plain’)

MIMETextクラスの第一引数にメール本文 message、第二引数にメール形式 'plain' を指定して、MIMEオブジェクトを生成します。HTML形式のメールを送付したい場合は、メール形式に 'html' を指定します。

msg[‘Subject’] = mail_title
msg[‘To’] = to_email
msg[‘From’] = from_email
msg[‘cc’] = cc_mail

生成したMIMEオブジェクトにキーワード引数でメール情報を指定します。
msg['Subject'] 件名
msg['To'] 送信元アドレス
msg['From'] 宛先アドレス
msg['cc'] ccアドレス

PRG4: サーバを指定してメールを送信する

SMTPでメールを送信するためにsmtplib オブジェクトにサーバ情報、ログイン情報を設定します。

ログイン情報としてパスワードを使用しますが、Gmailの設定で取得したアプリパスワードを指定します。(Gmailのログインパスワードではありません)

smtp_host = ‘smtp.gmail.com’
smtp_port = 587
smtp_password = ‘Gmailで取得したアプリパスワード’

GmailのSMTPサーバ情報とログインパスワードを設定します。

server = smtplib.SMTP(smtp_host, smtp_port) 

smtplib モジュールの SMTP クラスで引数をサーバアドレス、ポート番号を指定してオブジェクトを生成します。

server.starttls()

TLS (Transport Layer Security) モードでSMTP接続します。以降のSMTPコマンドは暗号化されます。

server.login(from_email, smtp_password)

暗号化した通信でGmailのSMTPサーバにログインします。引数のユーザ名は送信元のGmailアドレスと同じため from_email を指定します。

server.send_message(msg)

send_message()の引数にMIMEオブジェクトを指定してメールを送信します。

server.quit()

server.quit()でSMTP接続を終了してメール送信処理は完了です。

ファイルを添付してメールを送信する

ファイルを添付してメールを送信するコードは以下のようになります。

Pythonでメールを作成・送信する場合との違いを中心にプログラムを解説します。

PRG1: ライブラリ設定

from email.mime.multipart import MIMEMultipart

email.mime.multipart モジュールから MIMEMultpart クラスをインポートします。
MIMEMultipartクラスを使用することで、1つのメールに何種類ものデータを「添付」する事ができます。これによりテキストメッセージと添付ファイルを同時に送信する事ができます。

from email.mime.application import MIMEApplication

ファイルを添付するために from email.mime.application モジュールから MIMEApplication クラスをインポートします。

from pathlib import Path

添付ファイルのファイル名操作のために PathlibPath クラスをインポートします。

PRG2: メール情報の設定

送信メールの設定を行います。
ここは上記で解説した「Pythonでメールを作成・送信する」の PRG2 と同じです。

PRG3: MIMEマルチパートでメールを作成

msg = MIMEMultipart()

MIMEMultipartオブジェクトを生成して msg に格納します。

msg[‘Subject’] = mail_title
msg[‘To’] = to_email
msg[‘From’] = from_email
msg[‘cc’] = cc_mail
msg.attach(MIMEText(message))

MIMEMultipartオブジェクトmsgにキーワード引数でメール情報(件名、送信元アドレス、宛先アドレス)を指定します。

テキストメッセージはMIMETextクラスでオブジェクト化して、MIMEMultipartオブジェクトへ「添付」します。

PRG4: 添付ファイルの読み込み

filepath = Path(‘./sample.png’)
filename = filepath.stem

添付ファイルのパスを pathlibPath オブジェクトとして設定し filepath.stemで拡張子抜きのファイル名を取り出して filename に格納します。

pathlibの使い方は以下の記事を参考にしてください。
・参考記事:【Python入門】pathlibの使い方(パス操作)- ファイル名・拡張子の取得

with open(filepath, ‘rb’) as f:
    attach = MIMEApplication(f.read())

添付ファイルfilepathをバイナリファイル f として開き、MIMEApplicationクラスの引数に f.read() を指定して、添付ファイルオブジェクト attach に格納します。

attach.add_header(‘Content-Disposition’, ‘attachment’, filename=filename)

添付ファイルにヘッダ情報を付与します。引数の 'Content-Disposition', 'attachment' は、添付ファイルをダウンロードしてローカルに保存することを指定しています。
第三引数は添付ファイルの表示名を指定しています。

msg.attach(attach)

MIMEMultipartクラスのattach()メソッドで、添付ファイルオブジェクトを指定して、オブジェクトに添付します。

PRG5: サーバを指定してメールを送信する

SMTPでメールを送信するためにsmtplib オブジェクトにサーバ情報、ログイン情報を設定します。

ログイン情報としてパスワードを使用しますが、Gmailの設定で取得したアプリパスワードを指定します。(Gmailのログインパスワードではありません)

smtp_host = ‘smtp.gmail.com’
smtp_port = 587
smtp_password = ‘Gmailで取得したアプリパスワード’

GmailのSMTPサーバ情報とログインパスワードを設定します。

server = smtplib.SMTP(smtp_host, smtp_port) 

smtplib モジュールの SMTP クラスで引数をサーバアドレス、ポート番号を指定してオブジェクトを生成します。

server.starttls()

TLS (Transport Layer Security) モードでSMTP接続します。以降のSMTPコマンドは暗号化されます。

server.login(from_email, smtp_password)

暗号化した通信でGmailのSMTPサーバにログインします。引数のユーザ名は送信元のGmailアドレスと同じため from_email を指定します。

server.send_message(msg)

send_message()の引数にMIMEオブジェクトを指定してメールを送信します。

server.quit()

server.quit()でSMTP接続を終了してメール送信処理は完了です。

以上でファイルを添付してメールを送信する方法の解説は終了です。

Gmailの設定

Gmailでメール送信を行う場合は、セキュリティ設定が必要になります。
設定を行わずにメール送信を行うと、以下のようなエラーが発生します。

SMTPAuthenticationError
(535, b’5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials z22-20020a63e556000000b003c644b2180asm7538738pgj.77 – gsmtp’)

ここからGmailの設定方法を解説していきます。

まずGmailを開き、右上のアカウントアイコンをクリックします。

するとポップアップメニューが表示されるので「Googleアカウントを管理」をクリックします。

Googleアカウントを管理

次に左側のサイドバーからセキュリティを選択します。

セキュリティ設定

画面を下にスクロールさせて、Googleへのログイン から 「スマートフォンを使用してログイン」がオフになっている場合は、クリックして設定に進みます。

スマートフォンを使用してログイン

2段階認証プロセスの説明が表示されます。下にスクロールして「使ってみる」をクリックします。

2段階認証プロセス

2段階認証の設定に進みますので、指示に従って設定を完了させてください。

2段階認証の設定が完了したらセキュリティの設定画面に戻り、アプリパスワードの設定を行います。

アプリパスワード

設定画面で、アプリ「メール」 デバイス「Windowsパソコン」を選択して、生成をクリックします。

アプリデバイス設定

16桁のアプリ用パスワードが生成されるので、このパスワードをコピーしてPythonスクリプトで使用します。

パスワード確認

これでGmail側の設定は完了です。

Pythonでメールを作成・送信する方法を解説しました。
ぜひ色々な場面で活用して業務効率化を進めてください。

以下の記事も参考にしてみてください。
・関連記事:PythonでOutlookのメールを取得する
・関連記事:【Win11対応】Pythonスクリプトを自動実行する方法