PythonでGmailおよびOutlookからメールを送信

以前、Juliaでメール送信するプログラムを紹介しました。

dededemio.hatenablog.jp

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)

メール設定の保存(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のメール送信の設定

  • GmailでメールをSMTPで送信するときは、サーバをsmtp.gmail.comに、ポートは587とします。

support.google.com

  • 以前はGoogleアカウントのセキュリティ設定で「安全性の低いアカウント」をONにしておけば、Googleアカウントのユーザー名・パスワードでSMTPをそのまま使えていたものの、現在はその設定が使えないようです。
  • そこで、アプリパスワードと呼ばれる別のパスワードを設定します。手順は以下の記事にありますが、
    • Googleアカウントに二段階認証を有効にする
    • セキュリティ→アプリパスワードで、パスワードを生成する
    • そのパスワードをconfigのpasswordに記載する

を行えば送信できます。

qiita.com

Outlookのメール送信の設定

  • OutlookでメールをSMTPで送信するときは、サーバをsmtp.office365.comに、ポートを587とする必要があるようです。

  • ちなみに、OutlookGmailと同様、アプリパスワードが必要になっています。

support.microsoft.com

  • 手順もGmailと同様で、
    • Microsoft accountからセキュリティ→高度なセキュリティオプションで、二段階認証を有効にする
    • 高度なセキュリティオプション→アプリパスワードから、アプリパスワードを生成する
    • 上記のパスワードをconfigのpasswordに記載する

とすれば送信できます。