メールでの投稿が可能になりました。

これも実現させたかった機能の一つなんですが、メール投稿が可能になりました。

投稿フォームから画像を投稿できなかった端末(携帯等)でもメールに添付させれば投稿できるので、是非ともご活用頂きたい所です。

対応画像はJPG、PNG、GIF形式、複数を添付しても最初の1ファイルのみが投稿されます。

技術的には、まぁ一から書ける筈もなく、例によって検索頼りでした;

Net::POP3にてメールを受信、MIME::Parserによって添付ファイルと本文に分け、投稿処理をさせています。


Web上にて、多くのサンプル等見せて頂きましたが、


Perlメモ/Perlでメールを受ける - Walrus, Digit.】
http://digit.que.ne.jp/work/wiki.cgi?Perl%E3%83%A1%E3%83%A2%2fPerl%E3%81%A7%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%92%E5%8F%97%E3%81%91%E3%82%8B


などを中心に参考とさせて頂いております。


一つ問題だったのが本文が空の画像メールで、ケースバイケースらしいのですが、この場合シングルパートのメールとして送られる場合があり、そのままだとテキストとして表示されてしまうという事態に陥りました。


この辺の話題は、


ウィルコム端末でソフトバンク3G携帯からの写メールを受信すると文字化ける? - w-zero3日和】
http://blog.goo.ne.jp/mypda/e/6bb3429b0ab623b10ec85f007a3a9e41


に載ってました。


現状での回避策としては、"Content-Transfer-Encoding"を判断材料として、"7bit"以外は弾く仕様にしてます(あってるかしら)。

メーラーに対してチェックできてる訳ではない為、意図しない結果を招く場合があるかもしれませんが、宜しくお願い致します。


また、受信後の投稿処理ですが、メール着信をトリガーにしてスクリプトを走らせる事ができないので、この辺を検討中なのですが、思い付く所だと、

1) 投稿者にスクリプトにアクセスして貰う
投稿の時間差は起こらないが、欲を言えばメールを投げただけで投稿してくれれば非常にありがたい。
2) 訪問者をトリガーにする
一日を通して途切れないだけの閲覧者がいないと時間差が起こる。
一般的に閲覧>書込なので、できる事ならば閲覧時の負荷増大は避けたい所。
メールが何通もサーバーに溜まっている状態だと結構な増大になるのではないかと。
3) 誰かの書込をトリガーにする
これもかなりの書込者がいないとメールが溜まり、書込時の負荷の更なる増大。
4) cronを使用する
指定した時間にスクリプトを起動してくれるとの事で、現実的と言えば現実的だが、1時間に1回とかだとどうなのかと言った所。
複数設定して、クロールまでの時間差を減らせれば理想に近づく。

こんな所でしょうか。


この中だとcronを使用しつつ、即反映させたい場合にはスクリプトにアクセスして貰うのが良いのかなと言った所です。

と言う訳でcronの設定もしてみようかと思います。