開発したシステムから、通知のためにメールを送りたいときはよくあります。
Pythonでメールを送る方法をまとめました。
合わせて、PythonでLINE通知を送る方法もまとめています。
なおサンプルコードはGMailで送る場合です。
通常の場合
import smtplib from email.mime.text import MIMEText from email.utils import formatdate def create_message(from_addr, to_addr, subject, body): msg = MIMEText(body) msg['Subject'] = subject msg['From'] = from_addr msg['To'] = to_addr msg['Date'] = formatdate() return msg def send(from_addr, to_addr, msg, password): smtpobj = smtplib.SMTP('smtp.gmail.com', 587) smtpobj.ehlo() smtpobj.starttls() smtpobj.ehlo() smtpobj.login(from_addr, password) smtpobj.sendmail(from_addr, to_addr, msg.as_string()) smtpobj.close() to_addr = '送信先メールアドレス' from_addr = '送信元メールアドレス' subject = '件名' password = "SMTPサーバーのパスワード" body = '本文' msg = create_message(from_addr, to_addr, subject, body) send(from_addr, to_addr, msg, password)
これで送信できます。
smtplibとは、SMTPサーバーからメールを送信するためのライブラリです。
sendに書かれた処理が、一連の流れです。smtplib.SMTPがSMTPのインスタンスです。SMTPサーバーのURLとポート番号で作ります。
MIMETextは、ボディを作るために使います。
formatdateで現在の日時がスタンプされます。
Djangoの場合
from django.core.mail import send_mail subject = "件名" message = "本文" from_email = "送信元メールアドレス" recipient_list = [ "送信先メールアドレス" ] send_mail(subject, message, from_email, recipient_list)
settings.py
...(中略)... EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 587 EMAIL_HOST_USER = '送信元メールアドレス' EMAIL_HOST_PASSWORD = 'SMTPサーバーのパスワード' EMAIL_USE_TLS = True
Djangoの場合、メールを送る処理は簡潔に書けます。
send_mail関数で一発です。送信先メールアドレスだけ指定の仕方に注意してください。
ただし、settings.pyにいろいろと設定が必要です。
- EMAIL_BACKEND
以下の様に指定します。
django.core.mail.backends.smtp.EmailBackend
Djangoのメール送信デーモンみたいなものです。
- EMAIL_HOST、EMAIL_PORT
SMTPサーバーのURLとポート番号です。
- EMAIL_HOST_USER、EMAIL_HOST_PASSWORD
メールアドレスとパスワードを設定します。
- EMAIL_USE_TLS
GMailの場合はTrueにします。GMailのSMTPサーバーがTLSを使っているからです。
GMailからメール送信する場合の注意点
GMailのサーバーからメールを送ろうとすると、セキュリティの関係でうまく送れない場合があります。
この場合、下記のサイトを参考に「アプリパスワード」というものを作り、その「アプリパスワード」でGMailのサーバーに認証をかけてみてください。システムで使うパスワードがこの「アプリパスワード」です。
Google(gmail)アカウント – アプリパスワードの生成(作成)
https://pc-karuma.net/google-account-generate-app-password/
LINEにメッセージ送信
https://notify-bot.line.me/ja/
まず上記のサイトから、LINEのAPIを叩くためのトークンを取得します。
LINE Notifyというところから通知が来るようになります。
サンプルコードは以下です。
import requests line_notify_token = '取得したトークン' line_notify_api = 'https://notify-api.line.me/api/notify' message = '送りたい文章' payload = {'message': message} headers = {'Authorization': 'Bearer ' + line_notify_token} requests.post(line_notify_api, data=payload, headers=headers)
上記サイトは分かりやすいので、迷うことはないと思います。
まとめ
今回は、Pythonからメールを送る方法、LINEの通知を送る方法について見てきました。
使うサービスにログインさえしていれば、簡単に実装できることが分かったのではないかと思います。
運用時の監視などで、メールやLINEは有効に使えます。
監視業務の円滑化のためにぜひ利用してみてください。