Pythonで「Send to Kindle」を自作しよう!

IT

今回掘るテーマ ⛏️

ある日、サーバールームの扉の前でモグラ先生が 「おや? Send to Kindle が動かないぞ!」 と首をかしげていました。どうやら日本アカウントだと公式 Windows アプリがインストールできないケースがあるらしいのです 🪹。そこで今回は――

モグラ先生: 「それなら穴を掘って仕組みを丸ごと作っちゃおう! ほら、“掘って見つけた!” ってやつだよ」

メール送信だけで Kindle にファイルを届けるパーソナルドキュメントサービスを Python で手軽に呼び出すツールを作ります。最新仕様をチェックしつつ、安全&便利に運用していきましょう!


どうして自作が必要? 🧐

  • 公式アプリが日本ストアにない/動かないことがある
    2024 年末、Amazon は Windows/Mac 用の新しい “Send to Kindle” アプリ を公開しましたが、日本リージョンのアカウントではダウンロードページが表示されない場合があります。 (Send to Kindle – Windows App – Amazon.com)
  • メール送信は今も有効
    Kindle には端末ごとの Send-to-Kindle E メールアドレス が割り当てられており、ここにファイルを添付して送るだけでクラウドへアップロードできます。 (Send to Kindle – Email – Amazon.com)
  • 2025 年 4 月からの新ルール
    セキュリティ強化のため、ドメイン単位(@example.com)の承認は廃止。完全一致アドレスのみ許可されるようになりました。 (Amazon is adding a new Send to Kindle restriction – Reddit)

モグラ先生: 「公式が穴をふさぐなら、ぼくらは別のトンネルを掘ればいいさ!」


仕組みをざっくり図解 🗺️

  1. Gmail で添付ファイル付きメールを送信
  2. Amazon の Personal Document Service が受信
  3. Kindle ライブラリへ自動登録 → 端末/アプリに配信

小さな穴掘りポイント
モグラ先生: 「一度に送れるのは 25 個・合計 50 MB までだよ。超えると穴が詰まるから注意! 🐾」 (Learn How to Use Your Send to Kindle Email Address – Amazon.com, Troubleshoot Send to Kindle Errors – Amazon Customer Service)


最新仕様チェック(2025 年 4 月版)📜

項目内容
対応拡張子EPUB / PDF / DOCX / RTF / TXT など (Learn About Sending Documents to Your Kindle Library – Amazon.com)
添付上限25 ファイル・50 MB/1通(ZIP 可) (Learn How to Use Your Send to Kindle Email Address – Amazon.com)
送信元承認済みアドレス最大 15 件 (Learn How to Use Your Send to Kindle Email Address – Amazon.com)
セキュリティ変更2025-04-01 以降、完全一致アドレスのみ許可 (Amazon is adding a new Send to Kindle restriction – Reddit)

モグラ先生: 「送信前に Gmail アドレスを “承認済みリスト” に入れるのを忘れずに!」


事前準備 ⛏️

1️⃣ Gmail 側

  1. Google アカウントで 2 段階認証 を有効化。
  2. アプリパスワード を生成(16 桁のコード)。 (Sign in with app passwords – Gmail Help)

モグラ先生: 「最近 “アプリパスワード” のメニューが隠れがちだけど、直接リンクなら出てくるよ。出てこない場合は Gmail API + OAuth2 を検討しよう」 (App Password not listed as an available option – Gmail Community)

2️⃣ Amazon 側

  1. 「コンテンツと端末の管理」→ 設定 → パーソナルドキュメント設定 を開く。 (Learn How to Use Your Send to Kindle Email Address – Amazon.com)
  2. Send-to-Kindle E メールアドレス(端末ごとに一意)をメモ。 (How to Find Your Kindle Email Address)
  3. 承認済み E メールアドレスリストに Gmail を追加。 (Add an Email Address to Receive Documents in Your Kindle Library)

コードを書いてみよう 💻

以下は最小構成のサンプルです。環境変数や .env で情報を隠すと安全度アップ!

import os
import sys
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

GMAIL_USER     = os.getenv("GMAIL_USER")      # 例: "[email protected]"
GMAIL_APP_PASS = os.getenv("GMAIL_APP_PASS")  # 16桁アプリパス
KINDLE_ADDR    = os.getenv("KINDLE_ADDR")     # 例: "[email protected]"

def send_to_kindle(files):
    msg = MIMEMultipart()
    msg["From"] = GMAIL_USER
    msg["To"]   = KINDLE_ADDR
    msg["Subject"] = ""  # 件名は空でOK

    for f in files:
        with open(f, "rb") as fp:
            part = MIMEApplication(fp.read(), Name=os.path.basename(f))
        part.add_header("Content-Disposition", "attachment", filename=os.path.basename(f))
        msg.attach(part)

    with smtplib.SMTP("smtp.gmail.com", 587) as smtp:
        smtp.starttls()
        smtp.login(GMAIL_USER, GMAIL_APP_PASS)
        smtp.send_message(msg)

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("ドラッグ&ドロップでファイルを渡してね!")
    else:
        send_to_kindle(sys.argv[1:])
        print("📚 メールを送信しました。到着を待とう!")

小さな穴掘りポイント
モグラ先生:VPNSMTP ブロックのあるネットワークだと接続失敗するよ。ポート 587 が開いているか確認しよう!」


EXE 化して配布するなら? 🚀

  • PyInstaller で1ファイル化 → 気軽に配布  (Send to Kindle – Microsoft Support)
  • さらに最適化したいなら Nuitka でバイナリ化して高速起動もアリ!

モグラ先生: 「EXE にするときは .env を同梱せず、環境変数で注入するのが安全だよ!」


まとめ 🎉

  • Kindle へのファイル配送は メール送信 だけで完結!
  • 2025 年の新セキュリティ要件(完全一致アドレス)に注意。
  • Python + Gmail なら 30 行ほどでツールが完成。
  • EXE 化すればエンドユーザーもワンクリックで “掘って見つけた!” 体験。

モグラ先生: 「さぁ、今日も楽しく穴を掘って、技術の宝を見つけに行こう! ⛏️🐾」


“`

タイトルとURLをコピーしました