以前、Juliaでメール送信するプログラムを紹介しました。
Pythonでも同様のことを行うプログラムについて紹介します。
目次
動作環境
Pythonでのメール送信方法(smtplib)
- Pythonでのメール送信自体は、smtplibと、email.messageというモジュールが使えます。
import smtplib from email.message import EmailMessage subject = "題名" message = "本文" msg = EmailMessage() msg['From'] = from_email msg['To'] = to_email msg['Subject'] = subject msg.set_content(message) with smtplib.SMTP(smtp_server, smtp_port) as smtp: smtp.starttls() smtp.login(username, password) smtp.send_message(msg)
- ちなみに、最初Bingにやり方を聞いたのですが、MIMETextを使う例を出してきました。この例は他の紹介サイトでもよく見かけますが、Python3.6以上ならemail.messageが簡易でいいそうです。
メール設定の保存(configparser)
- メール設定は外部に持っておくようにします。ここでは、configparserを使って、テキストファイルから読んでみます。
from configparser import ConfigParser # 設定ファイルを読み込む config = ConfigParser() config.read('config_email.ini') smtp_server = config.get('mail', 'smtp_server') smtp_port = config.getint('mail', 'smtp_port') from_email = config.get('mail', 'from_email') to_email = config.get('mail', 'to_email') username = config.get('mail', 'username') password = config.get('mail', 'password')
- 上記のように
config.read
で読んだテキストファイルから、設定を読み出します。config.iniは以下のように記述します。
[mail] smtp_server = smtp.gmail.com smtp_port = 587 from_email = yourname@gmail.com to_email = hisname@gmail.com username = yourname@gmail.com password = yourpassword
Gmailのメール送信の設定
- 以前はGoogleアカウントのセキュリティ設定で「安全性の低いアカウント」をONにしておけば、Googleアカウントのユーザー名・パスワードでSMTPをそのまま使えていたものの、現在はその設定が使えないようです。
- そこで、アプリパスワードと呼ばれる別のパスワードを設定します。手順は以下の記事にありますが、
- Googleアカウントに二段階認証を有効にする
- セキュリティ→アプリパスワードで、パスワードを生成する
- そのパスワードをconfigのpasswordに記載する
を行えば送信できます。
Outlookのメール送信の設定
OutlookでメールをSMTPで送信するときは、サーバを
smtp.office365.com
に、ポートを587とする必要があるようです。- Outlookの設定→メール→メールを同期→SMTPの設定から、設定を確認できます。
- 最初は以下の記事を参照してSMTPサーバを
smtp-mail.outlook.com
としていたのですが、サーバが変わったようでこれでは動きませんでした。古い記事は更新するか削除しておいてほしい… support.microsoft.com
- 手順もGmailと同様で、
- Microsoft accountからセキュリティ→高度なセキュリティオプションで、二段階認証を有効にする
- 高度なセキュリティオプション→アプリパスワードから、アプリパスワードを生成する
- 上記のパスワードをconfigのpasswordに記載する
とすれば送信できます。