やりたいこと
-
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()