第9回:Raspberry Pi Pico WとMicroPythonで「今日の運勢」メールを送信しよう

つぶやき

概要

Pico WをWi-Fiに接続し、ランダムに「大吉・中吉・小吉・末吉・凶」を選んで、HTML形式のメールで送信します。
この仕組みを活用すれば、例えば自宅の環境変化に応じて運勢にひとひねりを加えたり、温度・湿度・人感センサーなどと組み合わせた通知に発展させることもできます。


コード

import network
import utime
import random
import umail
from secrets import secrets

def connect_wifi():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.connect(secrets['ssid'], secrets['password'])
    print("Wi-Fi接続中...")
    while not wlan.isconnected():
        utime.sleep(1)
    print("✅ Wi-Fi接続完了:", wlan.ifconfig())

def get_fortune():
    fortunes = [
        ("大吉", "今日は最高の一日!新しいことを始めよう!🌈"),
        ("中吉", "まずまずの運勢。人との出会いにツキがあります。🤝"),
        ("小吉", "小さな幸せが見つかる予感。🍀"),
        ("末吉", "少し注意が必要。焦らずに行動しましょう。🕊️"),
        ("凶", "今日はゆっくり休んでリセットを。😌")
    ]
    return random.choice(fortunes)

def send_fortune_mail():
    subject = secrets['email_subject']   # ← あなたのキー名に合わせた
    fortune, comment = get_fortune()

    html = f"""
    <html>
      <body style="font-family:sans-serif; background-color:#f4f4f4; padding:20px;">
        <h2>🌅 今日の運勢:{fortune}</h2>
        <p>{comment}</p>
        <hr>
        <p style="color:#888;">送信元:{secrets['sender_name']}</p>
      </body>
    </html>
    """

    print("📨 メール送信中...")

    smtp = umail.SMTP("smtp.gmail.com", 465, ssl=True)
    smtp.login(secrets['sender_email'], secrets['sender_app_password'])
    smtp.to(secrets['recipient_email'])
    smtp.write(f"From: {secrets['sender_name']} <{secrets['sender_email']}>\r\n")
    smtp.write(f"To: {secrets['recipient_email']}\r\n")
    smtp.write(f"Subject: {subject}\r\n")
    smtp.write("Content-Type: text/html; charset=utf-8\r\n")
    smtp.write("\r\n")
    smtp.write(html)
    smtp.send()
    smtp.quit()

    print(f"✅ メール送信完了!今日の運勢は【{fortune}】です。")

def main():
    connect_wifi()
    send_fortune_mail()

if __name__ == "__main__":
    main()

秘密情報を分離する(secrets.py)

Wi-FiのSSIDやパスワード、Gmailの送信設定などは別ファイルに保存。セキュリティ的にも安心です。

# secrets.py

secrets = {
'ssid': 'SSIDXXX',
'password': 'PASWORDXXX',
'sender_email': 'XXXXXXX@gmail.com',
'sender_name': 'RaspberryPiPico',
'sender_app_password': 'XXXX XXXX XXXX XXXX',
'recipient_email': 'YYYYYYY@gmail.com',
'email_subject': 'Email from RPi Pico',
}

MicroPython 用の SMTP クライアントライブラリ「uMail(MicroMail)」 のコードです、このファイルをmain.pyと同じフォルダに配置してください。

uMail/umail.py at master · shawwwn/uMail
A lightweight, scalable SMTP client for sending email in MicroPython - shawwwn/uMail

実行方法

  1. secrets.py , umail.py, main.py を用意(Wi-Fi SSID・パスワード・メール設定)
  2. 上記コードをPico Wに転送

解説

  • secrets から設定を読み込む構成なので、Wi-Fi情報やメール情報がコードにハードコーディングされません。
  • メール送信前に try…except で例外処理を入れているので、Wi-Fi切断やSMTP認証エラーなどが起きた時でもログが出力されて安心です。
  • HTMLメールを使っているため、絵文字やスタイル付きの本文が可能。スマホ/PC閲覧どちらでも見やすくなります。

コメント