はじめに
ローカルでRubyの開発をしている際に、メール送信でmailcacherに受信させて利用することがあると思います。
大体はWebUIにアクセスして本文を確認することが多いのですが、
私のローカル環境では、mailcatcherのWebUIにアクセスするとmailcatcherプロセスが停止してしまう問題が発生していました。
※ JSONでの取得であればプロセスが停止しない。それも不思議
この問題を解決させようと時間をかけていた際に、
「base64だな。この問題を解決する時間よりも、メールの中身をサクッとデコードして閲覧しよう」という思いが、
私の中で勝ってしまった為、利用した手段です。
※ 本来であれば、mailcatcherがちゃんと動く状態にするのが対処法としては正ですので、お忘れなきように。
この記事を実現するための材料
・ mailcatcher
・ curl コマンド
・ base64 コマンド
・ echo コマンド
メールリストの確認
現在受け取っているメールリストをmailcatcherに問い合わせる
% curl "http://localhost:1080/messages"
-----
[
{"id":3,"sender":"<hayaton+test@XXXXXXXX.XX>","recipients":"[\"<hayaton@XXXXXXXX.XX>\"]","subject":"test","size":"709","created_at":"2021-02-15T10:06:39+00:00"}, # <- これを読みたいとする。
{"id":2,"sender":"<hayaton+test@XXXXXXXX.XX>","recipients":"[\"<hayaton@XXXXXXXX.XX>\"]","subject":"test","size":"452","created_at":"2021-02-15T10:03:57+00:00"},
{"id":1,"sender":"<hayaton+test@XXXXXXXX.XX>","recipients":"[\"<hayaton@XXXXXXXX.XX>\"]","subject":"test","size":"295","created_at":"2021-02-15T10:02:21+00:00"}
]
※ 読みたいメッセージは3と割り出した。
id:3のメッセージを取得
% curl "http://localhost:1080/messages/3.json"
----- # WebでPrettyしました。
{
"id":3,
"sender":"<hayaton+test@XXXXXXXX.XX>",
"recipients":"[\"<hayaton@XXXXXXXX.XX>\"]",
"subject":"test",
"source":"Date: Mon, 15 Feb 2021 19:06:39 +0900\nFrom: hayaton+test@XXXXXXXX.XX\nTo: hayaton@XXXXXXXX.XX\nMessage-ID: <XXXXXXXXXXX_XXXXXXXX@hayatonnoMacBook.local.mail>\nSubject: test\nMime-Version: 1.0\nContent-Type: text/plain;\n charset=UTF-8\nContent-Transfer-Encoding: base64\n\n5LuK5pel44Gv5rip44GL44GE5pel44Gg44Go5oCd44GE44G+44GZ44GL77yf\n44Gd44KT44Gq44GT44Go44GC44KK44G+44Gb44KT44CC5pys5pel44Gv5a+S\n44GE5pel44Gn44GZ44CC5Yas44Gq44Gu44Gn44CCDQrjgarjga7jgafjgIHk\nu4rml6Xjga/ljYroopbjgafpgY7jgZTjgZnjga7jga/lpKflpInjgafjgZnj\ngILmmpbmiL/jgYzlv4XopoHjgarmmYLmnJ/jgavljYroopbjgajjgYTjgYbj\nga7jga/plpPpgZXjgaPjgabjgb7jgZnjgojjga3jgIINCuOBqeOBhuOBnuea\nhuOBleOCk+OBiuawl+OCkuOBpOOBkeOBj+OBoOOBleOBhOOAgg0K",
"size":"709",
"created_at":"2021-02-15T10:06:39+00:00",
"formats":[
"source",
null,
null
],
"attachments":[
]
}
※ source属性が大事
source属性から、本文のエンコードされた箇所を抜き出す。
Date: Mon, 15 Feb 2021 19:06:39 +0900\nFrom: hayaton+test@XXXXXXXX.XX\nTo: hayaton@XXXXXXXX.XX\nMessage-ID: <XXXXXXXXXXX_XXXXXXXX@hayatonnoMacBook.local.mail>\nSubject: test\nMime-Version: 1.0\nContent-Type: text/plain;\n charset=UTF-8\nContent-Transfer-Encoding: base64\n\n
# <- 改行コードが2つ続いた場所から、最後までの以下をコピー(場合によっては、==(イコール2つ)の手前まで)
5LuK5pel44Gv5rip44GL44GE5pel44Gg44Go5oCd44GE44G+44GZ44GL77yf\n44Gd44KT44Gq44GT44Go44GC44KK44G+44Gb44KT44CC5pys5pel44Gv5a+S\n44GE5pel44Gn44GZ44CC5Yas44Gq44Gu44Gn44CCDQrjgarjga7jgafjgIHk\nu4rml6Xjga/ljYroopbjgafpgY7jgZTjgZnjga7jga/lpKflpInjgafjgZnj\ngILmmpbmiL/jgYzlv4XopoHjgarmmYLmnJ/jgavljYroopbjgajjgYTjgYbj\nga7jga/plpPpgZXjgaPjgabjgb7jgZnjgojjga3jgIINCuOBqeOBhuOBnuea\nhuOBleOCk+OBiuawl+OCkuOBpOOBkeOBj+OBoOOBleOBhOOAgg0K
デコード
% echo "5LuK5pel44Gv5rip44GL44GE5pel44Gg44Go5oCd44GE44G+44GZ44GL77yf\n44Gd44KT44Gq44GT44Go44GC44KK44G+44Gb44KT44CC5pys5pel44Gv5a+S\n44GE5pel44Gn44GZ44CC5Yas44Gq44Gu44Gn44CCDQrjgarjga7jgafjgIHk\nu4rml6Xjga/ljYroopbjgafpgY7jgZTjgZnjga7jga/lpKflpInjgafjgZnj\ngILmmpbmiL/jgYzlv4XopoHjgarmmYLmnJ/jgavljYroopbjgajjgYTjgYbj\nga7jga/plpPpgZXjgaPjgabjgb7jgZnjgojjga3jgIINCuOBqeOBhuOBnuea\nhuOBleOCk+OBiuawl+OCkuOBpOOBkeOBj+OBoOOBleOBhOOAgg0K" | base64 -d
-----
今日は温かい日だと思いますか?そんなことありません。本日は寒い日です。冬なので。
なので、今日は半袖で過ごすのは大変です。暖房が必要な時期に半袖というのは間違ってますよね。
どうぞ皆さんお気をつけください。
まとめ
本来であれば、mailcatcherの問題を解決するのがベストです。(大事なことなので2回目です。)
ただ、サクッと本文だけ確認したい!
という場合に、こちらの記事を思い出してみてはいかがでしょうか?