Skip to content

ブログの死活監視の通知をGmailに送る方法

以前こちらの記事でWebサイトの死活監視をLINE Notifyに通知する方法を掲載しましたが、LINE Notifyが2025/3/31でサービス終了してしまったため、代替手段としてPythonからGmailで通知する方法を紹介します。

準備

PythonでGmailと連携してメール送信するための前提条件として、二段階認証が有効である必要があります。必要があれば以下から二段階認証を有効にしてください。

アプリパスワードを作成する

Googleアカウントからアプリパスワードを作成して、STMP経由でメールを送信します。

以下からアプリパスワードを作成してください。

上記のURLにアクセスしてGoogleアカウントでログインします。任意の名前を入力して作成 ボタンをクリックします。

203114d5 image

16文字のパスワードが表示されるのでメモしてください。

a176fccc image

Pythonスクリプトを修正する

以下の過去記事を参考にしてcrontabに登録したPythonスクリプトを編集します。

定期実行するPythonスクリプトを以下に修正してください。

checkblog.py

import subprocess
import requests
import time
from datetime import datetime
import smtplib, ssl
from email.mime.text import MIMEText
import gmail_account as gmail

send_address = "[メール送信先アドレス]"

def make_mime_text(mail_to, subject, body):
  msg = MIMEText(body, "html")
  msg["Subject"] = subject
  msg["To"] = mail_to
  msg["From"] = gmail.account
  return msg

def send_gmail(msg):
  server = smtplib.SMTP_SSL(
    "smtp.gmail.com", 465,
    context = ssl.create_default_context())
  server.set_debuglevel(0)
  server.login(gmail.account, gmail.password)
  server.send_message(msg)

def check_website():
    url = "[監視したいURL]"
    current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    
    try:
        response = requests.get(url)
        response.raise_for_status()
    
    except requests.exceptions.RequestException as e:
        msg = make_mine_text(
                mail_to = send_address,
                subject = "[件名]",
                body = "[本文]"
                )
        send_gmail(msg)

if __name__ == "__main__":
    check_website()

以下の項目を環境に合わせて入力してください。

  • [メール送信先アドレス]
  • [監視したいURL]
  • [件名]
  • [本文]

次に先程作成したアプリパスワードとアカウント情報を記録したPythonファイルをスクリプトと同じディレクトリ内に配置します。

gmail_account.py

account = "**************@gmail.com"
password = "****************"
  • account: Gmailアドレス
  • password: 作成したアプリパスワード

動作確認

上記のスクリプトではtry文で正常なレスポンスが得られなかった場合(例外)にのみメールが送信されるため、以下のようにtry文の中にメールを送る関数を記述してスクリプトを実行してください。

test_check_blog.py

import subprocess
import requests
import time
from datetime import datetime
import smtplib, ssl
from email.mime.text import MIMEText
import gmail_account as gmail

send_address = "[メール送信先アドレス]"

def make_mime_text(mail_to, subject, body):
  msg = MIMEText(body, "html")
  msg["Subject"] = subject
  msg["To"] = mail_to
  msg["From"] = gmail.account
  return msg

def send_gmail(msg):
  server = smtplib.SMTP_SSL(
    "smtp.gmail.com", 465,
    context = ssl.create_default_context())
  server.set_debuglevel(0)
  server.login(gmail.account, gmail.password)
  server.send_message(msg)

def check_website():
    url = "[監視したいURL]"
    current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    
    try:
        response = requests.get(url)
        response.raise_for_status()
        msg = make_mine_text(
		        mail_to = send_address,
		        subject = "[件名]",
		        body = "[本文]"
		        )
        send_gmail(msg)
    
    except requests.exceptions.RequestException as e:


if __name__ == "__main__":
    check_website()

メールを受信できれば動作確認完了です。

私のブログ(bitnami wordpress)ではサーバが落ちてしまうことが稀にあるため、以下のようにnginxを再起動するコードを追加しています。

import subprocess
import requests
import time
from datetime import datetime
import smtplib, ssl
from email.mime.text import MIMEText
import my_gmail_account as gmail

send_address = "[メール送信先アドレス]"

def make_mime_text(mail_to, subject, body):
  msg = MIMEText(body, "html")
  msg["Subject"] = subject
  msg["To"] = mail_to
  msg["From"] = gmail.account
  return msg

def send_gmail(msg):
  server = smtplib.SMTP_SSL(
    "smtp.gmail.com", 465,
    context = ssl.create_default_context())
  server.set_debuglevel(0)
  server.login(gmail.account, gmail.password)
  server.send_message(msg)

def restart_nginx():
    time.sleep(1)
    subprocess.run(['sudo', '/opt/bitnami/ctlscript.sh', 'restart', 'nginx'])

def check_website():
    url = "https://kuimal.com"
    current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    
    try:
        response = requests.get(url)
        response.raise_for_status()
    
    except requests.exceptions.RequestException as e:
        restart_nginx()
        msg = make_mine_text(
                mail_to = send_address,
                subject = "check kuimal blog",
                body = str(e) + ", restarted kuimal.com"
                )
        send_gmail(msg)
        print(current_time + ", " +  str(e) + ", restarted kuimal.com")

if __name__ == "__main__":
    check_website()
カテゴリWordPress

Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントは日本語で入力してください。(スパム対策)

CAPTCHA