PythonにてメールやLINE通知を送信する方法のまとめ

Python入門

開発したシステムから、通知のためにメールを送りたいときはよくあります。
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にメッセージ送信

LINE Notify
LINE NotifyはGitHub,IFTTT,MackerelなどのWebサービスからの通知を、LINEで受信することが出来る便利なサービスです。

まず上記のサイトから、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は有効に使えます。
監視業務の円滑化のためにぜひ利用してみてください。