2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【絶望】Switch2の当選メールを見逃したので、PC起動時に壁紙を強制変更して絶対気づくシステムを作ったら、別の悲劇に襲われた話

2
Posted at

こんにちは、皆さん。
突然ですが、私は過去に人生最大の痛恨のミスを犯しました。

ずっと欲しかった「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への道はまだまだ遠そうですが、めげずにシステムを「モバイル対応」にリファクタリングしていこうと思います。

皆様も、メールの見逃しと外泊にはくれぐれもお気をつけください……!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?