Kindleに100MB超のPDFファイルを送ろうと試行錯誤した結果wwww

# TL; DR

ご存知ですか？
Kindle端末とPCをUSBで繋げると、PCのPDFファイルを直接Kindle端末に配置できますよ。

ちなみに、Send-to-Kindleで受付けしてくれるファイルサイズ上限は**50MB**です。

> 最大で合計50 MBまで送信できます。

[Amazon.co.jp ヘルプ: Send to Kindle Eメールアドレスの使用方法](https://www.amazon.co.jp/gp/help/customer/display.html?nodeId=G7NECT4B4ZWHQ8WV)



# はじめに

Kindle Unlimitedが3ヶ月無料だったので、ついでに長年欲しかった電子書籍端末として、Kindle端末を購入しました。

そして使い続けて数ヶ月、なんと、手持ちのPDFファイルがKindle端末で読めるということを、今更ながら知りました。
それならそうと、早く言ってほしかった。

そう、手元にはたくさんの未読PDFファイルがあるのです！
既にホコリをかぶっているKindle端末が復活するチャンスです。

本記事では、どのようにKindle端末にPDFファイルを送ればよいのか、試行錯誤した結果を記録しておきます。



# 試行錯誤内容

遠回りした内容を記しています。
本記事の内容の**99%**が詰まっていますが、結論だけ読みたい場合は、読み飛ばして構いません。


## KindleでPDFファイルが読める、とは？

実は、「Kindleパーソナル・ドキュメントサービス」という、「Amazonアカウントに登録されている対応端末にファイルを無料で送信できるツール」が存在します。
PDF以外にも、様々な形式ファイルをKindle端末で読むことができます。

[Amazon.co.jp ヘルプ: Kindleライブラリへのドキュメントの送信について](https://www.amazon.co.jp/gp/help/customer/display.html?nodeId=G5WYD9SAF7PGXRNA)

しかし、この「Kindleライブラリ」へのファイル送信方法が曲者で、なんと、基本的にはE-mailでしか送信できません。
この機能を、Send-to-Kindleと呼ぶらしいです。


## E-mailでファイル送信する際の問題点

E-mailの送信データ容量は、メールサーバーによって制限されています。
おなじみGmailは、25MBまでのデータサイズしか送信できません。
他の多くのフリーメールサービスでも、多くは25MBまでです。

もちろん、データサイズというのは、メール自体のサイズも含めます。
ヘッダーや送信先メールアドレスなど、データサイズが増える要因はたくさんあるので、大きなファイルは殆ど送れないと考えてよいでしょう。

つまり、100MBを超えるようなPDFファイルは、通常の方法では送れない、というわけです。

ただ、それで終わっちゃうとシャクなので、もう少し抗ってみました。


## 自分のPCからE-mailを直接送信してみる

メールを送ればいいなら、別にGmailのプラットフォームに依存する必要はありません。
であれば、自分のPCからメールを送ればいいのでは？と考えました。

とりあえず、Perlでメールを送ってみます。
まずは、ファイルを添付していない状態でメールを送ってみます。
ファイル未添付状態でメールを送信すると、Kindleライブラリから「ファイルが無いぞ」と返事を返してくれるので、メールが届くかどうか確認できます。

```pl:簡易的なメール送信
use strict;
use warnings;
use utf8;
use Email::Stuffer;

# メール送信
Email::Stuffer
    ->from('my_gmail_account@gmail.com') # とりあえずGmailを騙ってみる
    ->to('amazon_account_xxxxxx@kindle.com') # Send-to-Kindleの送信先メールアドレス
    ->text_body("I'm morichan!¥n")
    # ->attach_file('./file.pdf') # ここは後でコメントアウトを外す予定
    ->send;

1;
```

[Email::Stuffer - A more casual approach to creating and sending Email:: emails - metacpan.org](https://metacpan.org/pod/Email::Stuffer)
[【Perl】E-mai送信 - Qiita](https://qiita.com/shutokawabata0723/items/1f5b67727d048f71c4c6)

しかし、一切返事は来ません。
それもそのはず、Gmailであることを示すためには、まずはGmailのSMTPで認可を得る必要があるからです。

そこで、次にSMTP経由のGmailを送ってみます。

```pl:GmailのSMTPサーバーを経由するメール送信
use strict;
use warnings;
use utf8;
use Email::Stuffer;
use Email::Sender::Transport::SMTP::TLS;

# SMTPサーバーでの認証設定
my $SMTP_TLS_CONF = {
    host => 'smtp.gmail.com',
    port => 587, # GmailのSMTPサーバー（TLS必須）のポート番号
    username => 'my_gmail_account',
    password => 'my_gmail_account_password',
    debug=>1
};
# SMTPサーバーでの認証設定付与
my $smtp = Email::Sender::Transport::SMTP::TLS->new($SMTP_TLS_CONF);

# メール送信
Email::Stuffer
    ->from('my_gmail_account@gmail.com') # Gmailのメールアドレス
    ->to('amazon_account_xxxxxx@kindle.com') # Send-to-Kindleの送信先メールアドレス
    ->transport($smtp)
    ->text_body("I'm morichan!¥n")
    # ->attach_file('./file.pdf') # ここは後でコメントアウトを外す予定
    ->send;

1;
```

[Sending HTML e-mail using Email::Stuffer](https://perlmaven.com/sending-html-email-using-email-stuffer)
[Email::Sender::Transport::SMTP::TLS - Email::Sender with Net::SMTP::TLS (Eg. Gmail) - metacpan.org](https://metacpan.org/pod/Email::Sender::Transport::SMTP::TLS)
[プリンタ、スキャナ、アプリからのメール送信 - G Suite 管理者 ヘルプ](https://support.google.com/a/answer/176600?hl=ja)

すると、なんとGmailから弾かれてしまいます！

Gmailでは、2段階認証を実装していないシステムは、基本的に拒否する設定にしています。
これを解決するには、その機能を実装するのがいいのでしょうが、ただファイルを送りたいだけなのに、そこまでするのは面倒ですよね。

とりあえず、その場しのぎに、「安全性の低いアプリのアクセス」を許可して再送信します。

[他のメール プラットフォームで Gmail のメールをチェックする - Gmail ヘルプ](https://support.google.com/mail/answer/7126229?p=BadCredentials&visit_id=637283141076736088-2646163422&rd=2#cantsignin)

すると、Kindleライブラリからの返事が、Gmailに届きました！
1段階目は突破のようです。


## 添付ファイル付きメール（ファイルサイズ小）を送信する

次に、ファイルを添付して送信しましょう。
上記のコメントアウトを外し、メールを再送信します。
今回は、ファイルサイズ20MB程度のファイルを添付します。

すると、今度は別の原因で弾かれてしまいました。
自分のPCで送る場合、mailsenderで送るメールサイズ制限に引っかかってしまいます。

これを解消するには、メールサイズ制限を取っ払うしかありません。
`/etc/postfix/main.cf` の `message_size_limit` を 0 にします。

```conf:/etc/postfix/main.cf
# デフォルト値
# message_size_limit = 10240000
message_size_limit = 0

# ついでに設定した（けどこれが役立つかは未検証）
mailbox_size_limit = 0
```

[[SOLVED] Postfix mail size issue](https://www.linuxquestions.org/questions/linux-general-1/postfix-mail-size-issue-934521/)
[Postfix の添付容量制限についてのメモ – treffen @ memo](https://pub.slateblue.tk/memo/day2586.html)
[maillog に "error writing message: File too large"が出力されていたら - よかろうもん！](https://interu.hatenablog.com/entry/20100805/1280981076)

そこで、再送信すると、めでたく送信できました！


## 添付ファイル付きメール（メールサイズ大）を送信する

とうとう本丸です。
ファイルサイズ100MB程度のファイルを添付し、メールを送ります。

すると......

なんということでしょう。
メールサイズ制限に引っかかってしまいました！

GmailのSMTPサーバーでもメールサイズを制限しており、メールサイズ25MB以上は送れないようです。


## メールサイズ制限が大きいフリーメールサービスを探す

もうGmailはアテになりません。
別のメールサービスを探してみます。

結果、いくつか見つかりましたが、殆どが月額料金がかかるプロバイダメールばかりでした。

- [BIGLOBEメール](https://email.biglobe.ne.jp/faq3.html)
- [OCNメール（Webメール）](https://support.ntt.com/ocn/support/pid2990021012)
- [ピカラWebメール](https://support.pikara.jp/faq/faq_m/entry-579.html)
- [メールワイズ](https://faq.cybozu.info/alphascope/cybozu/web/mailwise/Detail.aspx?id=2148&isCrawler=1)[^メールワイズとは]

[^メールワイズとは]: [サイボウズOffice](https://office.cybozu.co.jp/)のメールアプリで設定できるメールサーバーです。サイボウズOffice自体は30日間の無料トライアルがありますが、メールサーバーは別途契約が必要で、その [メール送信設定上限サイズが100MB](https://jp.cybozu.help/ja/o/admin_app/ml/per_size) という意味です。登録してから気付きました......

お金を払うのは構わないんですが、確認するためだけに契約しなければならないのは抵抗があり、断念しました......

以下、主要なメールサービスの最大送信容量です。
サービスによって、添付ファイルの上限かメール全体の上限かで分かれていることに注意してください。

- Gmail: [25MB](https://support.google.com/mail/answer/6584?co=GENIE.Platform%3DDesktop&hl=ja)
- Outloo.com: [20MB](https://support.microsoft.com/ja-jp/office/outlook-で大きいファイルを送信する-8c698842-b462-4a4c-8d53-5c5dd04f77ef)[^Outlookデスクトップアプリの場合]
- Yahoo!メール: [25MB](https://knowledge.support.yahoo-net.jp/PccMail/s/article/H000007380)
- AOLメール: [16MB](ttps://info.aol.jp/mail/help02701/#:~:text=AOLメールで送受信できる,送信をお試しください。)
- Zohoメール: [20MB](https://www.zoho.com/jp/crm/help/miscellaneous/attachments-in-email.html)
- iCloudメール: [20MB](https://support.apple.com/ja-jp/HT202305)

[^Outlookデスクトップアプリの場合]: Outlookデスクトップアプリの場合、 [レジストリを書換えることで送信容量制限を変更できる](https://office-hack.com/outlook/attachments-upper-limit/) みたいです。もしかしたらこれでどうにかなるかも......？（未検証）

[無料のクラウドメールサービス６選！注意点・製品の選び方も解説｜ITトレンド](https://it-trend.jp/cloud-mail/article/254-0017)


## 見つけてしまったUSB接続

いろいろ探していくうちに、下記ページを見つけてしまいました。
LaTeXを入れたことがある方はお馴染みのサイトです。

[【Send-to-Kindle】メールを使わず25MB以上の電子書籍ファイルをアップロードしてKindleで読む方法（日本で利用可能）](https://did2memo.net/2018/04/14/kindle-send-to-kindle-over-25mb/)

そこに、小さーな注意書きとして、以下の文言がありました。

> Kindle端末でファイルを開きたいという目的に限ればUSBケーブルでパソコンと接続してファイルをコピーする

いや、USB経由でファイル送れるんかい！！！



# おわりに

Kindle端末が1つしかない現在では、別にUSBで送信できるならそれで十分でした。
ちゃんと機能を確認しておけばよかったです。

よい電子書籍ライフをお送りください。