以前こちらの記事でWebサイトの死活監視をLINE Notifyに通知する方法を掲載しましたが、LINE Notifyが2025/3/31でサービス終了してしまったため、代替手段としてPythonからGmailで通知する方法を紹介します。
準備
PythonでGmailと連携してメール送信するための前提条件として、二段階認証が有効である必要があります。必要があれば以下から二段階認証を有効にしてください。
アプリパスワードを作成する
Googleアカウントからアプリパスワードを作成して、STMP経由でメールを送信します。
以下からアプリパスワードを作成してください。
上記のURLにアクセスしてGoogleアカウントでログインします。任意の名前を入力して作成
ボタンをクリックします。

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

Pythonスクリプトを修正する
以下の過去記事を参考にしてcrontabに登録した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()
Be First to Comment