デコメール送信しようとしてツマずいた事

By uchida - 09/09/04 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

snow leopardを購入して、不良DVDをゲットした内田です。こんにちは。
こないだメディアを交換してもらい、無事インストールする事ができました。
 
先日からデコメを送信するプログラムを作っていまして、結構苦戦しておりました。
ですので、今回は私がデコメ送信プログラムを作っていて、特に注意が必要だなと感じたところをピックアップして記事にしてみようと思います。
 

・htmlパートとtextパートが両方ないと駄目

デコメだからといって、htmlパートだけ送信しても
端末のメーラーは受け付けてくれません。
 

・添付画像の種類

画像はgifとjpegのみに制限する。
 

・auのcidの付け方

auに添付ファイルを付けて送信する場合、@マークが0個の場合は
画像を受け付けてませんでした。また@マーク2つ以上の場合も同様です。
つまり、auのcidは必ず@1つだけ付けて送りましょう。
 

・共通のcidの付け方

RFCの基準では、世界で重複しない値を付けなければならないようです。
ですので、しっかりユニークなコードを作って送りましょう。

{日付}{ランダムコード}@{サービスのドメイン}

 

・ファイルのbase64エンコードする時の注意

ファイル画像が少々大きくなるとbase64エンコード+76文字で改行が必要
phpの場合は

$img = base64_encode($data);
$img = chunk_split($img);

  

・ドコモはmixed以下にもエンコードを宣言する

無くても送信する事は出来ますが、docomoからのメールを見てみると
そうなっているので付けていた方が無難かと。
例えば

 Content-Type: multipart/mixed; boundary=010101010101
 Content-Transfer-Encoding: 7bit

 

・qmailでデコメを送る時の注意

今回作業するにあたって一番ハマった箇所です。
qmailの場合はマルチパート終了あたりに[ CRLF ]が入っているとメールが崩れるようです。崩れるといってもdocomoの場合だけのようです。au、softbank、pcではちゃんと表示できましたので。。。本文以外は[ LF ]で改行した方が良さそうです。
 

・終了を表すboundaryには行の最後に[–]を付ける

これをしなくてもちゃんと送る事ができるのですが、
約束事のような物みたいですので、付けておきましょう。