eml-minifier DownLoad from [researchmap]
メールボックスに保存されているe-mailのサイズを,記事「MIMEとメールのダイエット」で説明されている方法で縮小します。手順:
メーラーでe-mailをemlファイルとして保存し,
eml-minifierでemlファイルのサイズを縮小して,
emlファイルをメールボックスに戻し,
もとのe-mailを削除します。
eml-minifierは,perlのスクリプトなので,perlが動く環境であれば,Windows, Mac, Linuxに依らず使えます。
詳しい手順(Windows)
Windowsで,メーラーにthunderbiradを使う場合の詳しい手順です。
準備
配布zipファイルからeml-minifier.plをドキュメントに解凍する。
wslがインストールされていない場合はここを見てインストールする。
コマンドプロンプトなどから,
wsl -u root
と打って,wslを起動する。
以下のコマンドを打って,ドキュメントへ移動する。
cd /mnt/c/Users/ユーザ名/Documents
emlファイルの保存
Thunderbirdで,縮小したいメールを開く。
必要に応じて,Thundeirbirdで行えるメール縮小操作,添付ファイルの分離/削除をおこなう。
[ファイル]-[名前を付けて保存]-[ファイル]でメールを保存する。eml形式(e-mailのソース,テキスト)で保存される。保存先はドキュメント,名前は簡単なもの,例えばin.emlなどとする。
wslで
perl eml-minifier.pl < in.eml > out.eml
と打つと(eml-minifier.plの設置場所は,設置場所のパスを追加すれば何処でもよい),out.emlにbase64やquoted-printableでエンコードされたメールソースがデコードされて保存される。
その際,htmlメールであれば,plain text,htmlの不要な空白,タブ,空行,コメント,title,高さor幅が1のimg,高さor幅が0のobject,署名を削除し, のようなスペースと特殊文字はUnicode文字に置換し,タグのstyle属性をcssにまとめ,cssの参照されていないtag, id, class, 属性のスタイルを削除する。メールの種類によってはこれだけでサイズが半分以下になる場合もある。
out.emlをテキストエディタで開けば,ソースを読むことができるので,MIMEの知識があれば,ソースを編集することでさらにメールのサイズ縮小ができる。
なお,out.emlのヘッダには,次のようなContent-Description:
Content-Description: "modified by eml-minifier 2023/5/5 22:58:52"
が追加され,eml-minifierで修正された事と,その日付が記述される。
emlファイルの縮小
eml-minifierにオプションをつけることで,emlファイルをさらに縮小できる。オプションは次のようにリダイレクト記号の前にダブルコーテーションで囲んで指定する。
perl eml-minifier.pl "オプション" < in.eml > out.eml
本文のカット:たくさんの引用がついた本文などは,オプションにスラッシュで囲んだ正規表現
/正規表現/
を指定することで,カットすることができる。正規表現の一番目の小カッコのみが本文として残される。例えば
perl eml-minifier.pl "/(.*?)On/" < in.eml > out.eml
で,初めに出現する文字列On以降がカットされる。
インラインファイルの削除:添付ではなくメール本文にインライン画像として挿入された画像を削除するにはオプションに,
rm inline
をつける。例
perl eml-minifier.pl "/(.*?)On/ rm inline" < in.eml > out.eml
本文の初めに出現する文字列On以降をカットし,インライン画像ファイルを全て削除する。
添付ファイルの削除:Thundeirbirdでもできるが,本システムで添付ファイルを削除するにはオプションに
rm at
をつける。例
perl eml-minifier.pl "/(.*?)On/ rm at" < in.eml > out.eml
本文の初めに出現する文字列On以降をカットし,添付ファイルを全て削除する。
インラインファイルの縮小:インライン画像ファイルは,ファイル名の先頭に_を付けた名前で保存される。また,その画像をよりサイズの小さい画像に変換した「候補画像」が,ベース名末尾に_番号をつけて保存される。例:
_sample.png, _sample_1.png, _sample_2.jpg
もう一度同じオプションでeml-minifierを実行する(↑キーを押してEnter)と,インラインファイルが最も番号が小さい候補画像に置換される。たいていの場合これで効果が得られるが,もし「候補画像」を見て良いものがあれば,それより番号の小さい候補画像は削除しておく(番号のつかないファイルは削除しない)。候補画像がどれも気に入らない場合は,番号0の候補画像を自分で作成すればよい。なお,このインラインファイルの縮小機能を使うには,ImgageMagickをインストール
apt install imagemagick
しておく必要がある。また,Windowsの場合irfan viewをインストールしておけば,候補画像が増える。irfan viewは高速に画像閲覧できるので,候補画像を確認する際にも役立つ。
htmlの指定したタグで囲まれた部分の削除:但し,入れ子になっていないタグのみ。
rm <タグ名>
例:
rm <xml>
<xml>を削除すると表示が乱れる場合もあるが,MSのメールなどでは,表示が乱れることなくサイズが大きく減るものがある。
htmlのエンコードされたURLをデコードする。
rm url
全角のURLは短くなる。URLが効かなくなる場合もあるので,確認が必要。このオプションで,emlが1%以上削減される場合は,オプションが指定されていなくても,suggestionとして削減率が表示される。
htmlメールのscriptを削除する:
rm script
htmlメールのlinkタグを削除する:
rm link
htmlメールのタグのtitle属性を削除する:
rm title
htmlメールのhtmlを削除してplain textを残す:
rm html
htmlコメントを削除しない:
#com
styleタグ内の(参照されていないと判定された)スタイルを削除しない:
#style
style属性をstyleタグでs属性値として定義してs属性値に変換しない:
#style2s
rmオプションを複数指定するときは,2つ目以降のrmは省略して,rm inline atのように書ける。例:添付ファイルとインラインファイルを削除する:
perl eml-minifier.pl "/(.*?)On/ rm at inline" < in.eml > out.eml
自分でコマンドを書く:
次のようにシングルコーテーションで囲んだオプション
perl eml-minifier.pl 'オプション' < in.eml > out.eml
に,text/htmlの本体が代入された変数$bdyの値を変えるperlの文を書くことができる。例)>または}直後の改行,color="",="..."のダブルコーテーションを削除する:
'$bdy=~s/([>}])\n/$1/g;$bdy=~s/b\w+color=""//g;$bdy=~s/="([#\w]+)"/=$1 /g'
なお,シングルコーテーションで囲んだオプションとダブルコーテーションで囲んだオプションは,順不同で,両方あってもよい。
emlファイルの確認と保存
out.emlをダブルクリックして正しく表示されるか確認する。
out.emlをthunderbirdへドラッグ&ドロップして,メールボックスに戻し,もとのe-mailは削除する。
eml-minifierの設置
毎度perlコマンドを打つのは面倒と思う場合は,PATHの通ったディレクトリにeml-minifier.plへのシンボリックリンクeml-minifierを設置
ln -s ディレクトリ/emk-minifire.pl eml-minifier
すれば
eml-minifier オプション < in.eml > out.eml
でeml-minifierを起動できる。
削減率の例
Adobeからのライセンス関連のメール:
以下のように,オプションなしで,文字デコードで8%,スペース・タブの削除で78%,合計86%削減された。
Content-Transfer-Encoding: quoted-printable charset=utf-8
-7kB (-8%)
spaces and tabs
-63kB (-78%)
商品名のないAmazonの注文確認メール(2020年):
以下のように,オプションなしで,文字デコードで15%,styleのcss化で3%,区切り文字等の削減で8%,cssの削減で13%,プレーンテキスト削除で8%,合計49%削減された。
Content-Type: text/html; ascii
(-15%) Content-Transfer-Encoding: quoted-printable utf-8
( -3%) 28 styles -> 8 s attribute
( -8%) clean 1 parts of body, separated by <pre>
(-13%) clean tags, scripts, comments, styles(66 unused)
( -8%) Content-Type: text/plain
2021年のGoogle Formの控えメール:
以下のように,オプションなしで,文字デコードで25%,スペース・タブの削除で3%,合計28%削減された。
Content-Transfer-Encoding: quoted-printable charset=utf-8
-12kB (-15%)
Content-Type: text/plain;
-5kB (-8%)
spaces and tabs
-7kB (-8%)
2021年のDisney+の契約内容の確認メール:
以下のように,オプションなしで,文字デコードで19%,プレーンテキスト削除で15%,Unicodeスペースへの置換で1%,半角スペース・タブ・空行の削除で12%,合計51%削減された。
Content-Transfer-Encoding: base64 charset=utf-8
-13kB (-19%)
Content-Type: text/plain;
-9kB (-15%)
spaces by Unicode
-1kB (-1%)
spaces, tabs and empty lines
-8kB (-12%)
2022年のPayPalの領収書メール:
以下のように,オプションなしで,文字デコードで14%,styleのclass化で2%,半角スペース・タブ・空行の削除で25%,タグの最小化で3%,合計47%削減された。
Content-Transfer-Encoding: quoted-printable UTF-8
-8kB (-14%)
styles 48 / 103
-1kB (-2%)
spaces, tabs and empty lines
-14kB (-25%)
clean tag
-2kB (-3%)
2022年の楽天注文内容の確認メール:
以下のように,オプションなしで,プレーンテキスト削除で8%,半角スペース・タブ・空行の削除で20%,合計29%削減された。
Content-Type: text/plain;
-6kB (-8%)
Content-Type: text/html;
spaces, tabs and empty lines
-12kB (-20%)
2023年のMicrosoft Teamsからのメッセージ送信の連絡メール:
以下のように,オプションなしで,文字コード変換で11%,画像ファイル形式変換で5%,半角スペース・タブ・空行の削除で3%,使われていない画像ファイル削除で21%,合計45%削減された。
Content-Transfer-Encoding: base64 utf-8
-9kB (-11%)
spaces, tabs and empty lines
-2kB (-3%)
Content-Type: image ascii 805624B7ACF848CD841A00FE6A469CF4.jpeg
replaced to _805624B7ACF848CD841A00FE6A469CF4_1.jpg
1kB (1%)
Content-Type: image ascii 85125784ACCC49589261E44FEF938526.png
replaced to _85125784ACCC49589261E44FEF938526_1.png
1kB (1%)
Content-Type: image ascii DD8F9AE2C268479084909FBDECA8159D.png
replaced to _DD8F9AE2C268479084909FBDECA8159D_1.png
1kB (1%)
Content-Type: image ascii 18392A46B1774085BD3409F2FA2367A5.png
replaced to _18392A46B1774085BD3409F2FA2367A5_1.png
2kB (2%)
Content-ID: <actionable_logo>
actionable_logo is not cited
-2kB (-3%)
Content-ID: <actionable_apple>
actionable_apple is not cited
-6kB (-7%)
Content-ID: <actionable_android>
actionable_android is not cited
-7kB (-8%)
Content-ID: <actionable_microsoft_logo>
actionable_microsoft_logo is not cited
-2kB (-3%)
2023年のboxからの通知メール:
以下のように,オプションなしで,文字デコードで5%,プレーンテキスト削除で19%,半角スペース・タブ・空行の削除で5%,合計30%削減された。
Content-Transfer-Encoding: quoted-printable utf-8
-2kB (-5%)
spaces, tabs and empty lines
-2kB (-5%)
Content-Type: text/plain;
-8kB (-19%)