こんにちは、皆さん。
突然ですが、私は過去に人生最大の痛恨のミスを犯しました。
ずっと欲しかった「Switch2」。
念入りに応募は済ませていたものの、普段からメールをマメに見る習慣がなかった私。
ある日、ふとメールボックスを開くと、そこには神々しく輝く「ご当選のお知らせ」の文字が。
しかし、時すでに遅し。
当選の購入キャンセル期限から、きっちり3日後でした。
あの時の、何に対してかわからない怒りとイライラ。
「もう二度と、大切なメールを見逃してたまるか……!」
そう心に誓った私は、手元の技術(Python)を使って、**「絶対に当選に気づく自動化スクリプト」**の構築を決意しました。
🛠️ 絶対に見逃さないための防衛システム
「通知を見ないなら、一番視界に入る場所をジャックすればいい」という思想のもと、以下の仕組みを構築しました。
コードは注意してご使用ください。
[朝7:00 BIOSで自動起動] ──> [Windows起動] ──> [スタートアップで.bat実行]
│
▼
[PCの壁紙が変わる] <── [件名が一致!] <── [PythonがGmailを全チェック]
│
▼
[一致するものがなかったから30秒ごとにチェック]
1. 朝7:00にPCを強制自動起動(BIOS設定)
どんなに素晴らしいスクリプトを書いても、PCの電源が入っていなければ意味がありません。
まずはPCのBIOS設定から、毎朝7:00にPCが自動で立ち上がるようにハードウェアレベルで設定しました。
2. Gmailの特定フォルダを監視するスクリプト(Python)
GmailのAPI、あるいはIMAP等を利用し、特定のフォルダに入っている全メールの「件名」をチェックします。
過去の当選メールの件名パターンと一致するものがあった場合、WindowsのAPIを叩いてPCの壁紙を強制的に変更するスクリプトをPythonで記述しました。
3. スタートアップ用のバッチファイル(.bat)の作成
PCが起動した瞬間に上記のPythonスクリプトが全自動で走るよう、Windowsのスタートアップに登録するための.batファイルを作成しました。
これによって、**「朝起きてPCの画面を見たら、壁紙が変わっていて当選を瞬時に察知する」**という完璧なシステムが完成したはずでした。
💻 コアとなる実装(サンプルコード)
今回作成した、特定のメールを検知して壁紙を変更するPythonスクリプトのベースです。
(※セキュリティのため、パスワード等の取り扱いにはご注意ください)
import imaplib
import email
import time
import ctypes
from email.header import decode_header
with open("alive.log", "a", encoding="utf-8") as f:
f.write("起動しました\n")
# ===== 設定 =====
GMAIL_ADDRESS = "XXXXXXX@gmail.com"
APP_PASSWORD = "パスワード"
CHECK_INTERVAL = 30
KEYWORDS = ["招待者に選ばれました"]
WALLPAPER_PATH = r"当選画像のURL" # 実在する画像パス
# =================
def set_wallpaper(path):
ctypes.windll.user32.SystemParametersInfoW(20, 0, path, 3)
def decode_subject(raw_subject):
if not raw_subject:
return ""
decoded = ""
for part, encoding in decode_header(raw_subject):
if isinstance(part, bytes):
decoded += part.decode(encoding or "utf-8", errors="ignore")
else:
decoded += part
return decoded
print("Gmailに接続中...")
mail = imaplib.IMAP4_SSL("imap.gmail.com")
mail.login(GMAIL_ADDRESS, APP_PASSWORD)
mail.select('"[Gmail]/&MFkweTBmMG4w4TD8MOs-"')
print("接続成功。監視開始")
checked_uids = set()
while True:
with open("alive.log", "a", encoding="utf-8") as f:
f.write("監視中\n")
print("監視中…")
try:
status, messages = mail.search(None, "ALL")
uids = messages[0].split()
for uid in uids[-10:]:
if uid in checked_uids:
continue
_, msg_data = mail.fetch(uid, "(RFC822)")
msg = email.message_from_bytes(msg_data[0][1])
subject = decode_subject(msg.get("Subject", ""))
with open("subject_log.txt", "a", encoding="utf-8") as f:
f.write(subject + "\n")
matched = [k for k in KEYWORDS if k in subject]
if matched:
print("★ 一致検出 ★")
print("件名:", subject)
print("一致キーワード:", ", ".join(matched))
set_wallpaper(WALLPAPER_PATH)
checked_uids.add(uid)
time.sleep(CHECK_INTERVAL)
except Exception as e:
print("エラー発生:", e)
time.sleep(60)
📉 完璧なシステム。しかし、訪れた「結末」
「これで次の抽選は100%勝利確定。運営からのメールが待ち遠しいぜ!」
そう高を括っていた私に、神様はさらなる試練を与えました。
先日、ついに待ちに待った次の抽選結果発表が行われました。
結果はなんと……見事に「当選」!!
システムは完璧に作動したはずでした。BIOSも、Pythonも、何一つエラーは吐いていません。
それなのに、私はまたしても当選メールを見逃し、期限を過ぎてしまいました。
理由はただ一つ。
**「外泊中に当選メールが届き、私は自宅のPCの前にいなかったから」**です。
朝7:00、誰もいない無人の部屋で、静かに、そして力強くPCが自動起動し、私のデスクトップ壁紙を「緊急事態モード」に変えてくれていたようです。
帰宅して私が目にしたのは、PC画面の当選しましたの文字でした。
📝 今回の教訓と今後の展望
- 教訓:家から一歩も出ない引きこもりエンジニア専用のシステムだった。
-
次回へのアップデート案:
- 外泊対策として、TelegramやDiscordのBotと連携し、スマホにも通知(かつ壁紙変更のスクショを転送)を飛ばすようにトリガーを増設する。
- VPN等を使って出先から自宅PCのステータスを確認できるようにする(ただし、やりすぎには注意)。
技術の敗北ではなく、運用の敗北でした。
Switch2への道はまだまだ遠そうですが、めげずにシステムを「モバイル対応」にリファクタリングしていこうと思います。
皆様も、メールの見逃しと外泊にはくれぐれもお気をつけください……!