attachmentの画像保存
未だに完成してない、というか色々他の事やっててまたまた手付かずになってたやつ。
アウトプットして行かないと先に進めない気がするのでチラ裏程度に書いてます。
メーラーによって色々癖があってContent-Disposition:フィールドが全部attachmentになるとか全部inline(これはiPhone標準メーラーだけ)になるとかContent-Type: multipart/related;が無いとか色々癖がありすぎてどーやって対応すりゃいいのか未だに悩んでます。
Content-Disposition:フィールドがattachmentの場合、インラインならばContent-ID:フィールドがあるというのは解ったんだけど、ここから先の条件分岐が思い付かない。
iPhone標準メーラーだとContent-Disposition:フィールドが全部inlineになるし。
言葉で条件分岐を書くならば以下。
/*
バウンダリ区切りから次のバウンダリ区切りまでを $buf に格納。
Content-Disposition: attachmentの場合
$buf の中に Content-ID: が存在すれば inline処理
無ければ attachment処理 を施す。
*/
if (strpos($buf, "Content-ID:") !== false){
// inline処理
} else {
// attachment処理
}
iPhone標準メーラーだと最初の画像を添付ファイル扱いにすればやりたいことは実現できそうな気がする。X-Mailer:フィールドでiPhone Mailがヒットすれば専用の処理を走らす感じになるのかな。X-Mailer:フィールドは独自フィールドになるから今後、使えなくなりそうだけど今はこれしか思いつかない。
ソースがめちゃくちゃ肥大化してて凄く解り辛い。もっとスマートに記述出来たりするんだろうけど、レビューしてくれる人がいるわけでもないから自分でどうにかするしかない。解り辛くても動けばいいくらいに考えてます。後のメンテナンスのことを考えるほどスキルがあるわけでもないので、とりあえず動くものを作らないと。
何かあったら追記するかもです。