ようこそゲストさん

Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte

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

ここでは、日本の携帯端末特有のデコメの送り方について説明します。

前提として、テキストメール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. 使える画像の種類、容量はキャリアによって異なりますが、携帯端末にはごく小さなファイルしか送れないと理解しておいたほうがいいでしょう。詳細は各キャリアの仕様をみてください。

#  非公開コメント   
  • TB-URL  http://hal456.net/qdmail/07/tb/
  • デコメの送り方(OOP) Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte spok
    ■デコレーションメール日本での携帯端末向けの機能です。(ver0.7.2a以降)デコメは、ここで紹介する以外に、簡単デコメ機能(easyDeco)を利用することもできます。 ひとつの宛先にデコメを送付する$mail = & new Qdmail()...
  • 簡単モード(EasyMode) Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte spok
    ■簡単モードとはQdmailは、PHP4,PHP5の両方に対応したクラスライブラリであり、基本的にオブジェクト指向*1的な使い方をします。一方で、PHPを使っている方の中には、オブジェクトって何?という方もいらっしゃるかと思います。そのような方のために、Q...

簡単HTMLメール

htmlメール

ここで説明するのは、画像をインターネットに置いておくタイプのHTMLメールです。
HTML内に表示する画像もいっしょに送るタイプは、「インラインHTMLメール」といい、別項にて説明します。デコメは、インラインHTMLメールであり、日本の携帯端末向けのデコレーションメールは、別に説明します。
require_once('qdmail.php');
$mail = & new Qdmail();*1

$mail -> easyHtml(
      'mailto@example.com' ,
      '宛先(日本語OK)' ,
      'タイトル(日本語OK)' ,
      '本文(日本語OK)',
      'from@example.com' ,
      '配信元(日本語OK)'
 );
Htmlの部分が変わった以外は、簡単テキストメールの送り方と全く同じです。
添付ファイルやその他のヘッダーの設定の仕方も同じです。
もちろん、'本文(日本語OK)'の部分には、htmlで内容を書かなくてはなりません。
Qdmailでは、htmlメールを解析することができないメーラーや、ポリシーとしてhtmlメールを読まない方にも、内容だけは届くように、htmlメールから、代替テキストを自動的に生成して、メールに添えています。
このオプションは変更することもできます。

HTMLメールの例

ここでは、簡単なhtmlメールの内容の例を書いておきます。
$body = '<html><body bgcolor="#aabbff"><h1>HTMLメールテスト</h1><b>太字</b><font color="red">文字色を変えてみます。</font><p>Send by Qdmail</p><div><a href="mailto:address@example.com">メールはこちらへ</a></div></body></html>';
$mail -> easyHtml(
      'address@example.com' ,
      '宛先(日本語OK)' ,
      'タイトル(日本語OK)' ,
      $body,
      'from@example.com' ,
      '配信元(日本語OK)'
 );
このHTMLは古い書き方ですが、わかりやすいのであえて、古い方法で書きました。

*1 : PHP5では、"&"は必要ありません。


#  非公開コメント   
  • TB-URL  http://hal456.net/qdmail/06/tb/
  • 簡単デコレーションメール(デコメ) Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte spok
    ここでは、日本の携帯端末特有のデコメの送り方について説明します。前提として、テキストメールとHTMLメールの送り方は、知っておいて下さい。基本的な送り方例を示します。$mail = & new Qdmail();$body = '<html&...
  • 簡単モード(EasyMode) Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte spok
    ■簡単モードとはQdmailは、PHP4,PHP5の両方に対応したクラスライブラリであり、基本的にオブジェクト指向*1的な使い方をします。一方で、PHPを使っている方の中には、オブジェクトって何?という方もいらっしゃるかと思います。そのような方のために、Q...
  • デコメール Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte spok
    ここはバージョン1系のeasyモードの解説です。バージョン0系については、バージョン0系のeasyモードの使い方をご参照ください。ここでは、日本の携帯端末特有のデコメの送り方について説明します。前提として、テキストメールとHTMLメールの送り方は、知ってお...

簡単な使い方-テキストメール

単純なテキストメール

推奨文字コード

Qdmailは、ソースコードや渡された文字コードを自動的に判別し、もっとも文字化けの少ない方法で送るように試みます。
しかし、インターネットメールの環境は様々であり、自動判別は完璧なものではありません。
もっとも文字化けが出る可能性が低いのは、当方の開発環境と同じ以下の環境です。
スクリプトの文字コード:UTF-8で統一。
スクリプトの改行コード:CRLF
デフォルトでは、Qdmailは、このUTF-8を日本語のメールに適したiso-2022-jpに変換して送ります。
もちろん、EUC-JP,SHIFT-JISでも、改行コードLFのみでも大丈夫なようには設計してあります。

一番簡単なメール

インクルードできるパスの通ったところに、qdmail.phpを配置してください。
わからなければ、呼び出すファイルと同じディレクトリ(フォルダ)で構わないです。
require_once('qdmail.php');
$mail = & new Qdmail();
$mail -> easyText(
      'mailto@example.com' ,
      '宛先(日本語OK)' ,
      'タイトル(日本語OK)' ,
      '本文(日本語OK)',
      'from@example.com' ,
      '配信元(日本語OK)'
 );
(PHP5の時は、new 前の "&" は必要ありません。)

オブジェクト指向(OOP)的な書き方がわからない方は、-> や new の意味がわからないかも知れませんが、おまじないと思って、上記をコピー&ペーストしてみてください。
「$mail -> 関数名()」で、ひとつの関数と思って構いません。
なお、「$mail -> & new Qdmail();*1」は、最初に一回だけやっておけば、それ以降は必要ありません。
「$mail」は、自分の好きな変数名にして構いません。以後は、その「newした変数名->関数名」に置き換えて下さい。

添付ファイルを添付する

添付ファイルの置き場所:まずは、呼びだしもとのファイルと同じ場所において試してみて下さい。このファイルの置き場所は変更することもできます。
$mail = & new Qdmail();();*1
$mail -> easyText(
       'mailto@example.com' ,
       '宛先(日本語OK)' ,
       'タイトル(日本語OK)' ,
       '本文(日本語OK)',
       'from@example.com' ,
       '配信元(日本語OK)' , 
       'test.jpg',
       '添付された時のファイル名(日本語OK).jpg'
 );
なお、添付ファイルの置き場所は、呼びだしもとファイルからの相対パスでも、絶対パスでも指定できます。
例えば、
相対パス「./images/test.jpg」「images/test.jpg」
絶対パス「/home/hogehoge/images/test.jpg」「c:\htdocs\hogehoge\test.jpg」
最初の文字が「/」「¥」「\」の場合は、絶対パスとして解釈しますので注意してください。

複数のファイルを添付する。

これ以降は、$mail = & new Qdmail(); は省略します。

$param[] = array( 'test.jpg' , '添付ファイル名(日本語OK省略も可能).jpg' );
$param[] = array( 'test2.jpg' , '添付ファイル名2(日本語OK省略も可能).jpg' );

$mail -> easyText(
       'mailto@example.com' ,
       '宛先(日本語OK)' ,
       'タイトル(日本語OK)' ,
       '本文(日本語OK)',
       'from@example.com' ,
       '配信元(日本語OK)' , 
       $param
 );

複数の宛先に送付する (メールアドレスのみ指定)

バージョン0.7.8aより指定方法が変わる予定ですので、注意してください。
$to = array('mailto1@example.com' , 'mailto2@example.com' );
$mail -> easyText(
        $to ,
        'address' ,
       'タイトル(日本語OK)' ,
       '本文(日本語OK)',
       'from@example.com' ,
       '配信元(日本語OK)'  
 );
$mail -> easyText の第2引数が null になっていることに注意しましょう。バージョン0.7.8aより指定方法が変わる予定ですので、注意してください。
この例では、2人に送っていますが、何人でも追加できます。
toヘッダに複数指定した場合は、その指定された人全員が、全員のメールアドレスを知ることになりますので注意しましょう。
それがまずい場合(ネットサービスでは、ほとんどがそうですよね)は、後で述べるBCCを使いましょう。

複数の宛先に送付する (表示名も指定 パート1)

$to = array('mailto1@example.com' , 'mailto2@example.com' );
$toname = array('表示名1(日本語OK)','表示名2(日本語OK)');

$mail -> easyText(
        $to ,
        $toname ,
       'タイトル(日本語OK)' ,
       '本文(日本語OK)',
       'from@example.com' ,
       '配信元(日本語OK)'  
 );
メールアドレスと表示名の配列の対応関係が崩れないように注意しましょう。

複数の宛先に送付する (表示名も指定 パート2)


$to[] = array('mailto1@example.com' , '表示名1(日本語OK)' );
$to[] = array('mailto2@example.com' , '表示名2(日本語OK)' );

$mail -> easyText(
        $to ,
        null ,
       'タイトル(日本語OK)' ,
       '本文(日本語OK)',
       'from@example.com' ,
       '配信元(日本語OK)'  
 );
必ず、メールアドレスのキーがゼロ、表示名のキーが1になるようにします。
$mail -> easyText の第2引数が null になっていることに注意しましょう。

cc や bcc も追加する。

表示名も指定 パート2 の応用です。

$address['to'][] = array('mailto1@example.com' , '表示名1(日本語OK)' );
$address['to'][] = array('mailto2@example.com' , '表示名2(日本語OK)' );

$address['cc'][] = array('mailto3@example.com' , '表示名3(日本語OK)' );
$address['cc'][] = array('mailto4@example.com' , '表示名4(日本語OK)' );

$address['bcc'][] = array('mailto5@example.com' );
$address['bcc'][] = array('mailto6@example.com' );

$mail -> easyText(
        $address ,
        null ,
       'タイトル(日本語OK)' ,
       '本文(日本語OK)',
       'from@example.com' ,
       '配信元(日本語OK)'  
 );
※bccでは、表示名の指定は意味がありませんので、指定できません。

$address は、3次元配列になります。混乱しないように注意しましょう。
toやccは大文字でも小文字でも問題ありません。
ccやbccは省略可能ですが、toには最低1つの宛先が必要になりますので、注意して下さい。
$mail -> easyText の第2引数が null になっていることに注意しましょう。

reply-toを設定する

WEBサービスでは、Fromは配信専用にして、reply-toを設定したい場合もあるでしょう。

$var['from'] = array('mailto2@example.com' , '表示名2(日本語OK)');
$var['reply-to'] = array('mailto3@example.com' , '表示名3(日本語OK)');

$mail -> easyText(
       'address1@example.com' ,
       '宛先(日本語OK)' ,
       'タイトル(日本語OK)' ,
       '本文(日本語OK)',
       $var  
 );

複数の宛先&replt-to&複数添付ファイル

$address['to'][] = array('mailto1@example.com' , '表示名1(日本語OK)' );
$address['to'][] = array('mailto2@example.com' , '表示名2(日本語OK)' );

$address['cc'][] = array('mailto3@example.com' , '表示名3(日本語OK)' );
$address['cc'][] = array('mailto4@example.com' , '表示名4(日本語OK)' );

$address['bcc'][] = array('mailto5@example.com' );
$address['bcc'][] = array('mailto6@example.com' );

$var['from'] = array('address7@example.com' , '表示名7(日本語OK)');
$var['reply-to'] = array('address8@example.com' , '表示名8(日本語OK)');

$attach[] = array( 'test.jpg' , '添付ファイル名(日本語OK省略も可能).jpg' );
$attach[] = array( 'test2.jpg' , '添付ファイル名2(日本語OK省略も可能).jpg' );


$mail -> easyText(
       $address ,
       null ,
       'タイトル(日本語OK)' ,
       '本文(日本語OK)',
       $var,
       null ,
       $attach
 );
総復習です。
$mail -> easyText の引数の順番と null にしなければならない部分があるので、注意しましょう。

*1 : PHP5の時は、new 前の "&" は必要ありません。

# 矢野 功 2008年12月09日(火) 午後4時01分

エラーが出てメール送信ができません。
お手数ですがご教示お願い致します。

■単純なテキストメール
  Qdmailは、ソースと同じディレクトリに入れています。

■ ソース
 require_once('qdmail.php');
$mail = & new Qdmail();
$mail -> easyText(
'iskmyanoi@yahoo.co.jp' ,
# '宛先(日本語OK)' ,
'タイトル(日本語OK)' ,
'本文(日本語OK)',
'iskm1959@yahoo.co.jp');
# '配信元(日本語OK)'
# );

■エラー一覧
Warning: mb_strlen() [function.mb-strlen]: Unknown encoding "" in C:\Inetpub\wwwroot\qdmail.php on line 2715

Warning: mail() [function.mail]: SMTP server response: 521 mail not accepted from this domain in C:\Inetpub\wwwroot\qdmail.php on line 2178
Qdmail error: Qdmail Version 1.2.6b ,PHP Version 5.2.6
Qdmail error: OS WINNT ; PHP Version 5.2.6 ; Qdmail version 1.2.6b
php.ini status: mb_language = Japanese ; mb_internal_encoding = SJIS ; mb_detect_order = ASCII,UTF-8
Qdmail Status debug: 0, log: 0, errorlog: 0
Qdmail error: No send . Because PHP mail function replied error line -> 2190
Qdmail error: Send Error line -> 2115

Catchable fatal error: Object of class Qdmail could not be converted to string in C:\Inetpub\wwwroot\kojin.php on line 339

# spok 2008年12月10日(水) 午後11時02分

以下の情報をお知らせ下さい。

■OS名称 & バージョン
■お使いのソースコード(公開されて支障がある部分は適当に変更してください。)
■ソースコードの文字コード、改行コード

おそらく
>mb_internal_encoding = SJIS ; mb_detect_order = ASCII,UTF-8
がおかしいですね(たぶん)。
mb_internal_encoding = UTF-8 ; mb_detect_order = ASCII,UTF-8
として、ソースコードもUTF-8にしてみてください。

もしくは、
mb_internal_encoding = SJIS ; mb_detect_order = ASCII,SJIS,UTF-8
でもいいかもしれません。

また、php5の場合は、newの前の&は必要ありません。


#  非公開コメント   
  • TB-URL  http://hal456.net/qdmail/05/tb/
  • 簡単HTMLメール Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte spok
    ■htmlメールここで説明するのは、画像をインターネットに置いておくタイプのHTMLメールです。HTML内に表示する画像もいっしょに送るタイプは、「インラインHTMLメール」といい、別項にて説明します。デコメは、インラインHTMLメールであり、日本の携帯端...
  • 簡単デコレーションメール(デコメ) Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte spok
    ここでは、日本の携帯端末特有のデコメの送り方について説明します。前提として、テキストメールとHTMLメールの送り方は、知っておいて下さい。基本的な送り方例を示します。$mail = & new Qdmail();$body = '<html&...
  • 基本的な使い方-OOP編 Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte spok
    簡単Qdmailのオブジェクト指向的送り方です。OOPではない指定の仕方もありますが、出来る限りOOP方式をお薦めします。文字コードは、Qdmailが自動判別します。基本的な送り方( text メール)$mail = & new Qdmai();$...
  • 簡単モード(EasyMode) Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte spok
    ■簡単モードとはQdmailは、PHP4,PHP5の両方に対応したクラスライブラリであり、基本的にオブジェクト指向*1的な使い方をします。一方で、PHPを使っている方の中には、オブジェクトって何?という方もいらっしゃるかと思います。そのような方のために、Q...
  • デコメール Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte spok
    ここはバージョン1系のeasyモードの解説です。バージョン0系については、バージョン0系のeasyモードの使い方をご参照ください。ここでは、日本の携帯端末特有のデコメの送り方について説明します。前提として、テキストメールとHTMLメールの送り方は、知ってお...