2006.01.29
携帯電話からの投稿(post2blog)・・・(Movabletype)
そもそもpost2blogは携帯電話からの投稿が出来る、いわゆるmoblogに適したものだが、持っていた携帯電話のディジカメ機能は画素数が少なくて使っていなかった。
そこで、新しい携帯電話に取り替えた(vodone 902T)のだが、画素数は1.92Mピクセルで、これなら使えると思っていた。
ところが、画像を添付するとMMS(Multi Message Service)とか言って必ずhtml形式のメールになり、post2blogでは処理できない。
これでは、携帯を変えた意味がないので強引にhtml形式のメールをテキスト形式に変換する前処理のスクリプトを書いた。
だいたい、html形式のメールフォーマットなど知らないので、これを調べるところから始めた。
受け取ったメールは以下のようになっていた。
From - Sun Jan 29 16:14:11 2006 ・ ・ Date: Sun, 29 Jan 2006 16:13:48 +0900 Subject: Fw:テスト Content-Type: multipart/related;Type="multipart/alternative"; Content-Type: multipart/mixed; boundary="BoundaryXXYYZZ" ・・・・ ? From: <hogehoge@t.vodafone.ne.jp> Message-ID: <200601291148513D5E8> To: hogehoge@uls.fam.cx Mime-Version: 1.0 X-UIDL: W:##!58A!!;Z0"!6nK!! --BoundaryXXYYZZ ・・・・ ? Content-Type: multipart/alternative; boundary="BaFpaNPqVXR912gDOAspNg" ・・・・ ? --BaFpaNPqVXR912gDOAspNg ・・・・ ? Content-Type: text/plain;charset=ISO-2022-JP Content-Transfer-Encoding: 7bit テストです --BaFpaNPqVXR912gDOAspNg ・・・・ ? Content-Type: text/html;charset=ISO-2022-JP Content-Transfer-Encoding: 7bit <html> ・ ・ </body> </html> --BaFpaNPqVXR912gDOAspNg ・・・・ ? --BoundaryXXYYZZ ・・・・ ? Content-Location: dce99f2f.jpg Content-ID: <A0001> Content-Type: image/jpeg;name="DCF_0003~00.jpg" Content-Transfer-Encoding: base64 /9j/4QFaRXhpZgAATU0AKgAAAAgACgE ・ ・ --BoundaryXXYYZZ
これを見ると、赤字で示した区切り文字列(実際はもっと複雑)がヘッダー部で定義され、この区切り文字列で大きく文章部分と画像部分に分けている。
そして、文章部分をさらに青字で示したサブの区切り文字列でプレーンテキスト部とhtml部に分けているのが分かる。
この構造が分かれば、まずヘッダー部の削除線で消した部分をその次の赤字で示したものに置き換え?〜?ならびにhtml部分である?〜?を取り除いて、?の区切り文字列を赤字の文字列に差し替えてやれば、プレーンテキストフォーマットに変換出来ることが分かる。
そこで、文末に添付したようなフィルターをperlで書き(html2text)、post2blogの前に入れてやる。 すなわち /etc/aliaseに以下のように書き足す。
htmladdress: "| /usr/local/bin/html2text | /usr/local/bin/post2blog"
/etc/aliaseに書き加えたらnewaliasesコマンドで変更を反映させれば、これで準備完了です。
かなり、強引なやり方なので、他の携帯電話やメーラーからhtml形式で送って動作するか否かは分からないが、Outlook Expressでhtml形式で送ったところ、機能した。
なお、添付無しのhtml形式の場合は、上記の?〜?は存在せず、?の区切りは最初から赤字の区切りが同じものが入っているので?以降を強制的に切り捨てて、一応は動作している。
本来は1つの入り口でhtmlでもプレーンテキストでも自動的に見分けて処理できるようにすべきかと思うが、手抜きしてhtml形式のメールの入り口とプレーンテキストの入り口を分けて(/etc/aliasに2つ設けて)対処しています。
htmlからtext形式へのコンバート : html2text
コメント
コメントフィードを購読する
コメント投稿