業務効率化・自動化の事例として、Pythonでメールを作成して、自動送信する方法を解説します。
フォルダを監視して変化があったらメールを送信したり、データがしきい値を超えたらメールを送るなど、様々な用途に応用ができると思います。
メール送信クライアントにGmailを利用する場合は、Gmailアカウントの作成とセキュリティ設定が必要になります。Gmailの設定を参考に事前に実施してください。
使用モジュール
Pythonでメール作成と送信を行うにはPython標準モジュールの 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」を指定します。
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 | # PRG1: ライブラリ設定 import smtplib from email.mime.text import MIMEText # PRG2: メール情報の設定 from_email ='*****@gmail.com' to_email = '宛先メールアドレス' cc_mail = '' mail_title = 'メール件名' message = ''' ここにメール本文を記入 ''' # PRG3: MIMEオブジェクトでメールを作成 msg = MIMEText(message, 'plain') msg['Subject'] = mail_title msg['To'] = to_email msg['From'] = from_email msg['cc'] = cc_mail # PRG4: サーバを指定してメールを送信する smtp_host = 'smtp.gmail.com' smtp_port = 587 smtp_password = 'Gmailで取得したアプリパスワード' server = smtplib.SMTP(smtp_host, smtp_port) server.starttls() server.login(from_email, smtp_password) server.send_message(msg) server.quit() |
会社のメールサーバを使用する場合は、SMTPサーバ情報を社内の環境に合わせて設定します。
PCログイン時にメールへもログインしている場合は、パスワードは設定せずに送信できるはずです。
プログラムを解説していきます。
PRG1: ライブラリ設定
1 2 3 | # PRG1: ライブラリ設定 import smtplib from email.mime.text import MIMEText |
SMTPでメールを送信するために smtplib
、MIME形式でメールを作成するために email.mime.text
モジュールから MIMEText
クラスをインポートします。
PRG2: メール情報の設定
1 2 3 4 5 6 7 8 | # PRG2: メール情報の設定 from_email ='*****@gmail.com' to_email = '宛先メールアドレス' cc_mail = '' mail_title = 'メール件名' message = ''' ここにメール本文を記入 ''' |
to_email = ‘宛先メールアドレス’
cc_mail = ”
from_email
は送信元のGmailアドレスを設定します。to_email
には宛先のメールアドレスを指定します。cc_mail
は不要であれば削除しても問題ありません。
message = ”’
ここにメール本文を記入
”’
mail_title
にメールの件名、message
にメール本文を設定します。
MIMEオブジェクトでメールを作成
1 2 3 4 5 6 | # PRG3: MIMEオブジェクトでメールを作成 msg = MIMEText(message, 'plain') msg['Subject'] = mail_title msg['To'] = to_email msg['From'] = from_email msg['cc'] = cc_mail |
MIMETextクラスの第一引数にメール本文 message
、第二引数にメール形式 'plain'
を指定して、MIMEオブジェクトを生成します。HTML形式のメールを送付したい場合は、メール形式に 'html'
を指定します。
msg[‘To’] = to_email
msg[‘From’] = from_email
msg[‘cc’] = cc_mail
生成したMIMEオブジェクトにキーワード引数でメール情報を指定します。msg['Subject']
件名msg['To']
送信元アドレスmsg['From']
宛先アドレスmsg['cc']
ccアドレス
PRG4: サーバを指定してメールを送信する
1 2 3 4 5 6 7 8 9 10 | # PRG4: サーバを指定してメールを送信する smtp_host = 'smtp.gmail.com' smtp_port = 587 smtp_password = 'Gmailで取得したアプリパスワード' server = smtplib.SMTP(smtp_host, smtp_port) server.starttls() server.login(from_email, smtp_password) server.send_message(msg) server.quit() |
SMTPでメールを送信するためにsmtplib オブジェクトにサーバ情報、ログイン情報を設定します。
ログイン情報としてパスワードを使用しますが、Gmailの設定で取得したアプリパスワードを指定します。(Gmailのログインパスワードではありません)
smtp_port = 587
smtp_password = ‘Gmailで取得したアプリパスワード’
GmailのSMTPサーバ情報とログインパスワードを設定します。
smtplib
モジュールの SMTP
クラスで引数をサーバアドレス、ポート番号を指定してオブジェクトを生成します。
TLS (Transport Layer Security) モードでSMTP接続します。以降のSMTPコマンドは暗号化されます。
暗号化した通信でGmailのSMTPサーバにログインします。引数のユーザ名は送信元のGmailアドレスと同じため from_email
を指定します。
send_message()
の引数にMIMEオブジェクトを指定してメールを送信します。
server.quit()
でSMTP接続を終了してメール送信処理は完了です。
ファイルを添付してメールを送信する
ファイルを添付してメールを送信するコードは以下のようになります。
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 40 41 42 | # PRG1: ライブラリ設定 import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication from pathlib import Path # PRG2: メール情報の設定 to_email = '宛先メールアドレス' from_email ='*****@gmail.com' cc_mail = '' mail_title = 'メール件名' message = ''' ここにメール本文を記入 ''' # PRG3: MIMEマルチパートでメールを作成 msg = MIMEMultipart() msg['Subject'] = mail_title msg['To'] = to_email msg['From'] = from_email msg['cc'] = cc_mail msg.attach(MIMEText(message)) # PRG4: 添付ファイルの読み込み filepath =Path( './sample.png') filename = filepath.stem with open(filepath, 'rb') as f: attach = MIMEApplication(f.read()) attach.add_header('Content-Disposition', 'attachment', filename=filename) msg.attach(attach) # PRG5: サーバを指定してメールを送信する smtp_host = 'smtp.gmail.com' smtp_port = 587 smtp_password = 'Gmailで取得したアプリパスワード' server = smtplib.SMTP(smtp_host, smtp_port) server.starttls() server.login(from_email, smtp_password) server.send_message(msg) server.quit() |
Pythonでメールを作成・送信する場合との違いを中心にプログラムを解説します。
PRG1: ライブラリ設定
1 2 3 4 5 6 | # PRG1: ライブラリ設定 import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication from pathlib import Path |
email.mime.multipart
モジュールから MIMEMultpart
クラスをインポートします。
MIMEMultipartクラスを使用することで、1つのメールに何種類ものデータを「添付」する事ができます。これによりテキストメッセージと添付ファイルを同時に送信する事ができます。
ファイルを添付するために from email.mime.application
モジュールから MIMEApplication
クラスをインポートします。
添付ファイルのファイル名操作のために Pathlib
の Path
クラスをインポートします。
PRG2: メール情報の設定
1 2 3 4 5 6 7 8 | # PRG2: メール情報の設定 to_email = '宛先メールアドレス' from_email ='*****@gmail.com' cc_mail = '' mail_title = 'メール件名' message = ''' ここにメール本文を記入 ''' |
送信メールの設定を行います。
ここは上記で解説した「Pythonでメールを作成・送信する」の PRG2 と同じです。
PRG3: MIMEマルチパートでメールを作成
1 2 3 4 5 6 7 | # PRG3: MIMEマルチパートでメールを作成 msg = MIMEMultipart() msg['Subject'] = mail_title msg['To'] = to_email msg['From'] = from_email msg['cc'] = cc_mail msg.attach(MIMEText(message)) |
MIMEMultipartオブジェクトを生成して msg
に格納します。
msg[‘To’] = to_email
msg[‘From’] = from_email
msg[‘cc’] = cc_mail
msg.attach(MIMEText(message))
MIMEMultipartオブジェクトmsg
にキーワード引数でメール情報(件名、送信元アドレス、宛先アドレス)を指定します。
テキストメッセージはMIMEText
クラスでオブジェクト化して、MIMEMultipartオブジェクトへ「添付」します。
PRG4: 添付ファイルの読み込み
1 2 3 4 5 6 7 | # PRG4: 添付ファイルの読み込み・添付 filepath = Path('./sample.png') filename = filepath.stem with open(filepath, 'rb') as f: attach = MIMEApplication(f.read()) attach.add_header('Content-Disposition', 'attachment', filename=filename) msg.attach(attach) |
filename = filepath.stem
添付ファイルのパスを pathlib
の Path
オブジェクトとして設定し filepath.stem
で拡張子抜きのファイル名を取り出して filename
に格納します。
pathlibの使い方は以下の記事を参考にしてください。
・参考記事:【Python入門】pathlibの使い方(パス操作)- ファイル名・拡張子の取得
attach = MIMEApplication(f.read())
添付ファイルfilepath
をバイナリファイル f
として開き、MIMEApplicationクラスの引数に f.read()
を指定して、添付ファイルオブジェクト attach
に格納します。
添付ファイルにヘッダ情報を付与します。引数の 'Content-Disposition', 'attachment'
は、添付ファイルをダウンロードしてローカルに保存することを指定しています。
第三引数は添付ファイルの表示名を指定しています。
MIMEMultipartクラスのattach()
メソッドで、添付ファイルオブジェクトを指定して、オブジェクトに添付します。
PRG5: サーバを指定してメールを送信する
1 2 3 4 5 6 7 8 9 10 | # PRG5: サーバを指定してメールを送信する smtp_host = 'smtp.gmail.com' smtp_port = 587 smtp_password = 'Gmailで取得したアプリパスワード' server = smtplib.SMTP(smtp_host, smtp_port) server.starttls() server.login(from_email, smtp_password) server.send_message(msg) server.quit() |
SMTPでメールを送信するためにsmtplib オブジェクトにサーバ情報、ログイン情報を設定します。
ログイン情報としてパスワードを使用しますが、Gmailの設定で取得したアプリパスワードを指定します。(Gmailのログインパスワードではありません)
smtp_port = 587
smtp_password = ‘Gmailで取得したアプリパスワード’
GmailのSMTPサーバ情報とログインパスワードを設定します。
smtplib
モジュールの SMTP
クラスで引数をサーバアドレス、ポート番号を指定してオブジェクトを生成します。
TLS (Transport Layer Security) モードでSMTP接続します。以降のSMTPコマンドは暗号化されます。
暗号化した通信でGmailのSMTPサーバにログインします。引数のユーザ名は送信元のGmailアドレスと同じため from_email
を指定します。
send_message()
の引数にMIMEオブジェクトを指定してメールを送信します。
server.quit()
でSMTP接続を終了してメール送信処理は完了です。
以上でファイルを添付してメールを送信する方法の解説は終了です。
Gmailの設定
Gmailでメール送信を行う場合は、セキュリティ設定が必要になります。
設定を行わずにメール送信を行うと、以下のようなエラーが発生します。
ここからGmailの設定方法を解説していきます。
まずGmailを開き、右上のアカウントアイコンをクリックします。
するとポップアップメニューが表示されるので「Googleアカウントを管理」をクリックします。
次に左側のサイドバーからセキュリティを選択します。
画面を下にスクロールさせて、Googleへのログイン から 「スマートフォンを使用してログイン」がオフになっている場合は、クリックして設定に進みます。
2段階認証プロセスの説明が表示されます。下にスクロールして「使ってみる」をクリックします。
2段階認証の設定に進みますので、指示に従って設定を完了させてください。
2段階認証の設定が完了したらセキュリティの設定画面に戻り、アプリパスワードの設定を行います。
設定画面で、アプリ「メール」 デバイス「Windowsパソコン」を選択して、生成をクリックします。
16桁のアプリ用パスワードが生成されるので、このパスワードをコピーしてPythonスクリプトで使用します。
これでGmail側の設定は完了です。
Pythonでメールを作成・送信する方法を解説しました。
ぜひ色々な場面で活用して業務効率化を進めてください。
以下の記事も参考にしてみてください。
・関連記事:PythonでOutlookのメールを取得する
・関連記事:【Win11対応】Pythonスクリプトを自動実行する方法