▼ デコメール
ここはバージョン1系のeasyモードの解説です。バージョン0系については、バージョン0系のeasyモードの使い方をご参照ください。
ここでは、日本の携帯端末特有のデコメの送り方について説明します。
前提として、テキストメールとHTMLメールの送り方は、知っておいて下さい。
test2.jpgという名前の、適当な画像ファイルを、貴方のほうで準備しておいてください。もちろん、ファイル名はアルファベットと数字であれば、なんでも構いません。(cid:との連携は必要)
ただし、端末毎の違いをすべて検証すたわけではありません。場合によっては、表示が崩れることもあるかも知れません。
その際は情報をお寄せいただければ、幸いです。
技術的参考記事:CPA-LABテクニカル-デコメール携帯4社MIMEマルチパート比較
test2.jpgとtest3.jpgという名前の画像ファイルを適当に用意してください。
ここでは、日本の携帯端末特有のデコメの送り方について説明します。
前提として、テキストメールとHTMLメールの送り方は、知っておいて下さい。
基本的な送り方
例を示します。$mail = & new Qdmail(); $body = '<html><body bgcolor="#aabbff"> <h1>HTMLメールテスト</h1> <b>太字</b> <font color="red">文字色を変えてみます。</font> <div>画像はこのように</div> <img src="cid:test2.jpg"> <div>文章中に置くことができます。</div> <p>Send by Qdmail</p> <div>携帯端末、キャリアによって使えるHTMLタグが違いますので注意してください。</div> <div><a href="mailto:address@example.com">メールはこちらへ</a></div> <div><a href="tel:00-0000-0000">電話はこちらへ</a></div> </body></html>'; $mail -> easyDeco( array('address@exaple.com' ,'宛先(日本語OK)' ), 'デコメのテスト' , $body, array( 'from@example.com' ,'配信元(日本語OK)'), 'test2.jpg' );PHP5の場合は、new の前の"&"は必要ありません。
test2.jpgという名前の、適当な画像ファイルを、貴方のほうで準備しておいてください。もちろん、ファイル名はアルファベットと数字であれば、なんでも構いません。(cid:との連携は必要)
インテリジェント・デコメ・システム
通信キャリア(ドコモ、au、ソフトバンクモバイル、イーモバイル)は、それぞれデコメの仕様が異なりますが、Qdmailは、その違いを吸収して、@以下のアドレスで、キャリアを判別し、それぞれに適した形にHTMLメールを加工して、メールを送ります。ただし、端末毎の違いをすべて検証すたわけではありません。場合によっては、表示が崩れることもあるかも知れません。
その際は情報をお寄せいただければ、幸いです。
技術的参考記事:CPA-LABテクニカル-デコメール携帯4社MIMEマルチパート比較
キャリアをごちゃまぜにして、一度に送る
ちょっと複雑にみえますが、テキストメールの送り方を理解していれば簡単です。test2.jpgとtest3.jpgという名前の画像ファイルを適当に用意してください。
$mail = & new Qdmail(); $to[] = array('××××××@docomo.ne.jp','ドコモ端末さん'); $to[] = array('××××××@ezweb.ne.jp','au端末さん'); $to[] = array('××××××@softbank.ne.jp','ソフトバンク端末さん'); $to[] = array('××××××@emnet.ne.jp','イーモバイル端末さん'); $body = '<html><body bgcolor="#aabbff"> <h1>HTMLメールテスト</h1> <b>太字</b> <font color="red">文字色を変えてみます。</font> <div>画像はこのように</div> <img src="cid:test2.jpg"> <div>文章中に置くことができます。</div> <p>Send by Qdmail</p> <img src="cid:test3.jpg"> <div>携帯端末、キャリアによって使えるHTMLタグが違いますので注意してください。</div> <div><a href="mailto:address@example.com">メールはこちらへ</a></div> <div><a href="tel:00-0000-0000">電話はこちらへ</a></div> </body></html>'; $attach = array('test2.jpg','test3.jpg'); $mail -> easyDeco( $to , 'デコメのテスト' , $body, array( 'from@example.com' , '配信元(日本語OK)'), $attach );コツtips
- 画像のリンクは、”cid:ファイル名”とし、ファイル名を同じにします。これはコンテンツIDといいますが、別途指定することもできます。デフォルトは、ファイル名です。
- easyDecoモードでは、複数の宛先を指定しても、それをQdmailがひとつづつに分解し、1通ごとにメールを送付します。(そうしないこともできます。)
- 使える画像の種類、容量はキャリアによって異なりますが、携帯端末にはごく小さなファイルしか送れないと理解しておいたほうがいいでしょう。詳細は各キャリアの仕様をみてください。
# 検証して 2010年03月11日(木) 午後9時34分
$attach = array('test2.jpg','test3.jpg');
$mail -> easyDeco(
$to ,
'デコメのテスト' ,
$body,
array( 'from@example.com' , '配信元(日本語OK)'),
$attach
);
だと送信できませんでした。ちなみにインライン添付は画像2枚です。
以下のようにすると、OKでした。
$attach[] = array( $file1 , 'mail.gif' );
$attach[] = array( $file2 , 'phone.gif' );
$mail2 -> easyDeco(
$to,
'デコメのテスト' ,
$body,
array( 'from@example.com' ,'配信元(日本語OK)'),
$attach
);
# meda 2012年06月13日(水) 午後5時47分
Qdmailのバグではないと思いますが、デコメが上手く行かない場合があります。
.(ドット)が消える現象が起きます。
HTMLパートで下記のような改行パターンになるとドットが消えて、URLにアクセスできません。
---------
<a href=3D"http://test.domain=
.com/contents/1234/
----------
パソコン、ドコモ、auで試しましたが、どれもダメでした。
※URLが「http://test.domaincom/contents/1234/」とドットが消えます。
メール受取側の問題のようですが、何か対策はないでしょうか・・・
# meda 2012年06月13日(水) 午後6時26分
受取側の問題かと思いましたが、OutlookExpressでHTMLメールを作成し、同じ状況でメールを送ってもURLに問題が出ませんでした。
Qdmail側のバグっぽいです。
ただ、なぜそのバグが出ているのかが分かりません。。
# meda 2012年06月20日(水) 午前11時53分
↑のコメントを書いたものです。
どうやらQdsmtpのバグっぽいです。
Qdsmtpを使わなければこの現象は起きませんでした。
# irozak 2013年12月12日(木) 午後7時57分
qdsmtpの「smtpEscape()」関数に次のように1行足すことで解決出来るかと思いますよ。
-------------------------
function smtpEscape( $mes ){
$mes = preg_replace( '/\r?\n\.\r?\n/is' , $this->smtpLFC . '..' . $this->smtpLFC , $mes );
$mes = preg_replace( '/^\./m' , '..' , $mes );
if( 0 !== preg_match( '/\r?\n[^\r\n]{'.$this->smtp_limit.',}\r?\n/is' , $mes ) ){
return $this->errorGather('SMTP Overfllow '.$this->smtp_limit.' chars in one line.',__LINE__);
}
return $mes;
}
-------------------------
SMTPのDATAで改行する時は、行頭に「.」ドットが来るときにエスケープしなければなりません。