やりたいこと
-
pythonでメール送信したい
経緯
いろいろ処理をした結果をメールで通知したいと思ってOutlookでのメール送信を組み込んでみた。
毎日の運用なのでタスクスケジューラに設定したら、メール送信されたことになってるけど実際には送信されてこない。
タスクスケジューラからでなく、直接実行すれば送信される。
調べてみたら、サーバー環境でOutlookなどのoffice製品を使うのはちょっと難ありらしいことがわかった。
代替案として標準ライブラリを使えばできることがわかったのでメモしておく。
ポイント
- 標準ライブラリの
smtplibとemailを使う - その他、
サーバーホスト名,ポート番号,認証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()