デコメの送り方(OOP)

2008/04/18 未分類 spok

デコレーションメール

日本での携帯端末向けの機能です。(ver0.7.2a以降)
デコメは、ここで紹介する以外に、簡単デコメ機能(easyDeco)を利用することもできます。また、デコメテンプレートを利用してデコメを送信する方法htmlメールからデコメテンプレートを作成することもできます(1.0.7a以降)。

 ひとつの宛先にデコメを送付する

$mail = & new Qdmail();

// $mail -> attach() の前に以下の3つを入れて下さい。
$mail -> inlineMode( true );
$mail -> autoDecoJudge( true );
$mail -> toSeparate( true );

$mail -> attach( 'test2.jpg' );

$mail -> to('mailto@example.com','配信先名前(日本語OK)');
$mail -> subject( 'デコメのテスト(OOP)' );
$mail -> from('from@example.com','配信元名前(日本語OK)');

$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 -> html( $body );
$mail -> send();
PHP5では、newの前の & は必要ありません。
デコレーションメールの場合、$mail -> attach() する時に、デコメモードであるかどうかを判別しますので、$mail -> attach()する前に、インラインモードと自動デコメ判定をtrueにしておく必要がありますので注意して下さい。(toSeparate()は、複数宛先を指定しない場合は必要ありません。)

また、画像をきちんとリンクさせるために、「src="cid:test2.jpg"」のように"cid:"の後に続けて、ファイル名を書いて下さい。
この"cid:"以下のことをコンテンツID(COntent-Id)、略してCIDと言いますが、このCIDは、ファイル名でなくても、任意のものに変更することもできます。(変更の方法はまた後ほど)

異なるキャリア宛に一度の操作でデコメを送付する

$mail = & new Qdmail();

// $mail -> attach() の前に以下の3つを入れて下さい。
$mail -> inlineMode( true );
$mail -> autoDecoJudge( true );
$mail -> toSeparate( true );

$mail -> attach( 'test2.jpg' );

$to = array( '×××@docomo.ne.jp','×××@ezweb.ne.jp','×××@softbank.ne.jp','×××@emnet.ne.jp' );

$mail -> to( $to );

以下同じ
宛先に日本語名を使いたい、などの $mail -> to() の使い方は、Qdmailの基本的な使い方をご覧下さい。

ヘッダ、本文に別々のCharsetを指定する

2008/04/17 未分類 spok
かなり特殊な状況ですが、本文とヘッダーに別々の文字コードを使用したいときがあります。
その時は次のようにします。

ユーザーソースコードで対応する方法

ヘッダISO-2022-JP7bit
本文UTF-8base64
$mail = & Qdmail();

$mail -> charsetHeader( 'iso-2022-jp' , '7bit' ) ;
$mail -> charsetBody( 'utf-8' , 'base64' ) ;
Qdmailは、iso-2022-jpがデフォルトなので、上記の例でいうと$mail -> charsetHeaderはなくても、意図の通りに動作しますが、説明のために明示しています。

Qdmailのソースコード改変で対応する方法(UTF-8,BASE64)

$charset_content と$content_transfer_enc_text、$content_transfer_enc_htmlを定義している以下の部分をテキストエディタなどで検索して、以下のように修正してください。
var $charset_content = 'utf-8';
var $content_transfer_enc_text	= 'base64';
var $content_transfer_enc_html	= 'base64';

添付ファイルの指定(OOP)

2008/04/17 未分類 spok
添付ファイルのOOP的指定方法です。

オブジェクトの生成や他のアドレスの指定は省略します。それらは、基本的な使い方-OOP編をみてください。
Qdmailでは、いくつでもファイルを添付することが出来ます。

簡単な指定方法

$mail -> attach( 'test.jpg' );
ファイル名は、呼びだしもとのスクリプトからの相対パスでしていします。
絶対パスでも指定できます。

例)
/home/hogehoge/images/test.jpg //絶対パス方式
./images/test.jpg //相対パス方式

簡単な指定方法2(日本語ファイル名)

$mail -> attach( array('test.jpg' , '添付ファイル名(日本語OK)' ) );

複数ファイルの指定方法(その1)

現在、この方法は指定できません。
$attachPath = array( 'test.jpg' , 'test2.gif' );
$attachName = array( '添付ファイル名1' , '添付ファイル名2' );

$mail -> attach ( $attachPath , $attachName );

1.1.0bより復活させました。ただし、制限事項があります。
$attachPath = array( 'test.jpg' , 'test2.gif' );
$mail -> attach ( $attachPath , $attachName );
この方式で添付ファイル名は指定できません。

この指定ができるのは、インラインモードtrue or シンプルアタッチモードtrueの時だけです。
インラインモードは、
$mail ->inlineMode(true);
ただし、qd_send_mailでデコメ送信時は自動的にインラインモードになります。

シンプルアタッチモードは、
$mail->simpleAttach(true);
です。

シンプルアタッチモード、インラインモードであっても、他の指定方法を併用できます。
ただし、 $attach = array( filename , attach_name );だけは併用できませんので、その場合は、$attach = array( array(filename , attach_name) );と入れ子にしてください。

複数ファイルの指定方法(その2)

$attach[] = array( 'test.jpg' , '添付ファイル名1' );
$attach[] = array( 'test2.gif' , '添付ファイル名2' );

$mail -> attach ( $attach );

複雑な添付ファイルの指定方法(MIMEタイプとContent-IDを独自指定)

$attach = array(
    'PATH' => 'test.jpg' ,
    'NAME' => '添付ファイル名1',
    'CONTENT-TYPE'=>'anything/mimetype',
    'CONTENT-ID'=>'image_0001',
 );

$mail -> attach ( $attach );

基本的な使い方-OOP編

2008/04/17 未分類 spok

$mail -> send() 型

簡単Qdmailのオブジェクト指向的送り方です。
OOPではない指定の仕方もありますが、出来る限りOOP方式をお薦めします。
文字コードは、Qdmailが自動判別します。

基本的な送り方( text メール)

$mail = & new Qdmail();

$mail -> to( 'address@example.com' , '宛先日本語名' );
$mail -> subject( 'タイトルも日本語で' );
$mail -> text( 'ここに内容をいれます' );
$mail -> from( 'from@example.com' , '配信元日本語名' );

$mail ->send();
文字コードは、Qdmailが自動判別し、デフォルトでもっとも文字化けが起こりにくいiso-2022-jpで送ります。
「日本語名」は省略できます。
PHP5では、newの前の & は必要ありません。

cc,bcc,reply-to

cc,bcc,reply-toは次のように指定します。
$mail -> cc( 'address2@example.com' , '宛先cc日本語名' );
$mail -> bcc( 'address3@example.com' );
$mail -> replyto( 'address4@example.com' , '返信先replyto日本語名' );
※bccでは、宛先表示名は意味がありませんので、指定できません。

この場合、reply-toは、ハイフンを抜いてreplytoで指定しますので、気をつけて下さい。

複数宛先の指定方法その1


$to = array( 'address1@example.com','address2@example.com','address3@example.com' );

$toName = array( '宛先1の日本語名','宛先2の日本語名','宛先3の日本語名' );

$mail -> to( $to , $toName );

cc,bccも同様です。from,reply-toは、ひとつしか設定できません。


複数宛先の指定方法その2


$to[] = array( 'address1@example.com' , '宛先1の日本語名' );
$to[] = array( 'address2@example.com' , '宛先2の日本語名' );
$to[] = array( 'address3@example.com' , '宛先3の日本語名' );

$mail -> to( $to );
cc,bccも同様です。from,reply-toは、ひとつしか設定できません。

複数宛先の指定方法その3

$to[] = array( 'address1@example.com' , '宛先1の日本語名' );
$to[] = array( 'address2@example.com' , '宛先2の日本語名' );
$to[] = array( 'address3@example.com' , '宛先3の日本語名' );

foreach( $to as $addr_and_name ){
  $mail -> to( $addr_and_name  , null , true );
}
point
$mail -> to()の第3引数を true にするのがポイントです。
この第2引数は、これまでに設定されていたメールアドレスに「追加するか、上書きするか」を指定しています。
$mail -> to()の第3引数
追加true
上書きfalse
cc,bccも同様です。

htmlメール

$mail ->text('内容');の代わりに
$mail ->html('htmlメールの内容を入れます。');
とするだけです。
Qbmailのデフォルトでは、自動的に代替テキストが作成されます。
これでhtmlメールを読むことができないメーラでも、内容を読むことができるようになります。
例えば、原則としてテキストメールしか読めない*1秀丸メールや、携帯メールなどに送るときに有効でしょう。

この自動テキスト生成機能は、OFFにすることもできます。
$mail->send();の前に
$mail -> autoBoth(false);
としてください。

*1 : そのようなポリシーのメーラー

簡単デコレーションメール(デコメ)

2008/04/16 未分類 spok
ここでは、日本の携帯端末特有のデコメの送り方について説明します。

前提として、テキストメール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(
      'address@exaple.com' ,
      '宛先(日本語OK)' ,
      'デコメのテスト' ,
      $body,
      '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 ,
      null ,
      'デコメのテスト' ,
      $body,
      'from@example.com' ,
      '配信元(日本語OK)',
      $attach
 );
コツtips
  1. 画像のリンクは、”cid:ファイル名”とし、ファイル名を同じにします。これはコンテンツIDといいますが、別途指定することもできます。デフォルトは、ファイル名です。
  2. easyDecoモードでは、複数の宛先を指定しても、それをQdmailがひとつづつに分解し、1通ごとにメールを送付します。(そうしないこともできます。)
  3. 使える画像の種類、容量はキャリアによって異なりますが、携帯端末にはごく小さなファイルしか送れないと理解しておいたほうがいいでしょう。詳細は各キャリアの仕様をみてください。