LoginSignup
1
6

More than 3 years have passed since last update.

[Python] メール送信

Last updated at Posted at 2020-06-03

やりたいこと

  • pythonでメール送信したい

経緯

いろいろ処理をした結果をメールで通知したいと思ってOutlookでのメール送信を組み込んでみた。
毎日の運用なのでタスクスケジューラに設定したら、メール送信されたことになってるけど実際には送信されてこない。
タスクスケジューラからでなく、直接実行すれば送信される。
調べてみたら、サーバー環境でOutlookなどのoffice製品を使うのはちょっと難ありらしいことがわかった。
代替案として標準ライブラリを使えばできることがわかったのでメモしておく。

ポイント

  • 標準ライブラリのsmtplibemailを使う
  • その他、サーバーホスト名, ポート番号, 認証ID, 認証パスワードが必要
  • 但し、認証ID, 認証パスワードはなくてもOKだったりする場合もある(環境による)
  • 送信先が複数ある場合は1通づつ送信することになるので、送信先アドレスはリストで渡してfor文で回す

コードサンプル

sample.py
from email import message
import smtplib

smtp_host = 'ホスト名'
smtp_port = ホスト番号
smtp_account_id = '認証ID'
smtp_account_pass = '認証パスワード'
send_from = 'xxxxx@xxx.co.jp'
l_send_to = [
    'aaa@xxx.co.jp',
    'bbb@xxx.co.jp'
]

subject = '作業報告'
content = f'作業が終了しました'

for s in l_send_to:
    msg = message.EmailMessage()
    msg.set_content(content)
    msg['Subject'] = subject
    msg['From'] = send_from
    msg['To'] = s

    server = smtplib.SMTP(smtp_host, smtp_port, timeout=10)
    server.login(smtp_account_id, smtp_account_pass) # なくても大丈夫な場合もあり
    server.send_message(msg)
    server.quit()
1
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
6