デコメール

2008/07/27 未分類 spok

qd_send_mailでデコメール(デコレーションメール)

qd_send_mailは日本の携帯端末に向けてデコレーションメール(デコメ)を送信することができます。
デコメは、特殊なHTMLメール形式なので、基本的な送信方法はHTMLメールと同じですが、HTMLの中身に注意が必要です。

デコメは、キャリアによってマルチパート構成が異なりますが、Qdmailは送り先によって自動的に本文構成を変更するため、ユーザーはどこのキャリアに送信するのかを意識しなくても大丈夫です。

サンプルコード


$body = '<html><body bgcolor="#aabbff">
<h1>HTMLメールテスト</h1>
<b>太字</b>
<font color="red">文字色を変えてみます。</font>
<div>画像はこのように</div>
<img src="cid:test1.jpg">
<div>文章中に置くことができます。</div>
<img src="cid:test2.jpg">
<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>';


qd_send_mail(
      'deco',
      array('address@exaple.com' , '宛先(日本語OK)' ) ,
      'デコメのテスト' ,
      $body,
      array ( 'from@example.com' , '配信元(日本語OK)'),
      array(array('test1.jpg'),array(test2.jpg))
 );

textメール

2008/07/27 未分類 spok

qd_send_mailでテキストメール

オブジェクト指向がわからない方でも、mb_send_mailライクに日本語を送信できます。また、オブジェクト指向がわかっている方でも、より簡単にコードを書くことができます。
関数型であるのに、オプションでSMTP送信ができるのも、qd_send_mailの特徴です。

基本形

qd_send_mail( 'text', 宛先, 件名, 本文, From情報(&追加ヘッダー), 添付ファイル指定 );

サンプルコード

単純なテキストメール

標準型
メールアドレス関係で名前表示をする場合は、配列で指定します。
原則として、配列添え字0がメールアドレス、配列添え字1が表示名となります。
(これは変更することもできます。)

$to = array( 'address@example.com' , '宛先日本語名' );
$from = array( 'from@example.com' , '送り元日本語名' );
$subject = 'メールのテスト(テキスト)';
$body = "ここに本文を書きます。";

qd_send_mail( 'text' , $to , $subject , $body , $from);
宛先日本語名などが必要ない場合
メールアドレス関係で名前表示が必要ない場合は、配列にする必要はありません。
$to = 'address@example.com' ;
$from = 'from@example.com' ;
(以下、省略)
添付ファイルを送る場合
$to = array( 'address@example.com' , '宛先日本語名' );
$from = array( 'from@example.com' , '送り元日本語名' );
$subject = 'メールのテスト(テキスト)';
$body = "ここに本文を書きます。";
$attach = array( 'test.jpg' , '添付フィル.jpg');

qd_send_mail( 'text' , $to , $subject , $body , $from , $attach);
添付ファイルのファイル名は、相対指定です。
0系の指定の仕方も参考にしてください。

添付ファイルで、日本語ファイル名は必要ない場合

$attach = array( 'test.jpg');
(他省略)

添付ファイルで、MIMEタイプを明示的に指定する場合

QdmailではContent-typeヘッダにつけるMIMEタイプは、ファイル名の拡張子から自動判別します。
しかし、拡張子のないファイルや、明示的にMIMEタイプを変更したい場合は下記のようにしてください。
$attach = array( 'test.jpg' , '添付フィル.jpg' , 'test/mime' );
(他省略)
これで
--__Next-1-......__
Content-Type: test/mime;
 name="=?iso-2022-jp?B?GyRCRTpJVSVVJSMlaxsoQi5qcGc=?="
というヘッダになります。
添付ファイルを複数指定する場合
複数の添付ファイルを指定したいときはネストしてください。
$attach1 = array( 'test.jpg' , '添付1' );
$attach2 = array( 'test2.jpg' , '添付2' );
$attach = array($attach1,$attach2);

(他省略)

qd_send_mail( 'text' , $to , $subject , $body , $from , $attach);
他の任意のヘッダーを追加したい場合
任意のヘッダーは、配列で指定します。
From以外のヘッダーを指定する時は、必ずFromも明示的に設定してください。Fromは、必須のヘッダーです。
必ずフロムヘッダーが入る関係上、複数のヘッダーを指定することになるので、配列はネストすることになります。

配列のキー(添え字)が、ヘッダー名となり、配列の値が、ヘッダーの値となります。
Qdmailがヘッダー名に「:」(コロン)を自動的につけますので、ここでのキーは「:」は抜いた形で指定してください。
 $add_header = array( 
    'From' => array('from@example.com','FROM表示名'),
    'header-name' => 'parameter',
  );

(他省略)

qd_send_mail( 'text' , $to , $subject , $body , $add_header , $attach);
(FROM表示名が必要なく、メールアドレスだけでいい場合は'From'=>'from@example.com'でも構いません。

他の任意のヘッダーを複数追加したい場合
複数の追加ヘッダーを設定したい場合です。
$from = array( 'From' => array('from@example.com','FROM表示名' ));
$add_header1 = array( 'header-name' => 'parameter' );
$add_header2 = array( 'header-name2' => 'parameter2' );
$add_header = array( $from , $add_header1 , $add_header2 );

(他省略)

qd_send_mail( 'text' , $to , $subject , $body , $add_header , $attach);

関数型qd_send_mailの基本

2008/07/21 未分類 spok

関数型qd_send_mail()

mb_send_mail()ライクに指定できます。

基本構文
qd_send_mail(  'メールタイプ' ,
               'address@example.com',
               '件名',
               '本文',
               'from@example.com'
            );

'メールタイプ'

'メールタイプ'には、'text,'html,'deco'が入ります。
また、この第1引数を配列してオプションを渡すことができます。
オプションの詳しい方法については、オプションの指定方法をご覧下さい。

宛先、フロムに日本語を入れる場合

$to = array('address@example.com','宛先日本語');
$from = array('from@example.com','フロム日本語');

qd_send_mail( 'text' , $to , '題名ですsubject' , '本文' , $from );

添付ファイルを添付する場合

$to = array('address@example.com','宛先日本語');
$from = array('from@example.com','フロム日本語');
$attach = array('test.jpg','添付ファイル日本語名');

qd_send_mail( 'text' , $to , '題名ですsubject' , '本文' , $from , $attach);

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

$to = array('address@example.com','宛先日本語');
$from = array('from@example.com','フロム日本語');
$attach1 = array('test1.jpg','添付ファイル日本語名');
$attach2 = array('test2.jpg','添付ファイル日本語名');
$attach = array($attach1,$attach2);

qd_send_mail( 'text' , $to , '題名ですsubject' , '本文' , $from , $attach);

添付ファイルのMIMEタイプを明示的に指定する場合

(デフォルトでは拡張子から、適切なものが自動的につけられます)
$to = array('address@example.com','宛先日本語');
$from = array('from@example.com','フロム日本語');
$attach = array('test.jpg','添付ファイル日本語名',true,'image/jpeg');

qd_send_mail( 'text' , $to , '題名ですsubject' , '本文' , $from , $attach);

SMTPの玄人的操作法

2008/07/19 未分類 spok
必ずバージョン0.9.0a以降でご使用ください。

QdSmtpをQdmailから操作する。

QdSMTPを利用して、Qdmailからメールを送る基本的な方法は、QdSmtpでのSMTP送信をご覧ください。

ここでは、メールを送るだけではなくて、QdSmtpの機能をフル活用したいという人のためのコーナーです。

QdSmtpオブジェクトの取得方法

Qdmail&QdSmtpで、SMTP送信する場合は、インクルードできる場所にqdsmtp.phpファイルさえ置いてあれば、Qdmail側で勝手にインクルードして、勝手にオブジェクト生成(インスタンス)を行います。
これはこれで便利だと思うのですが、QdSmtpオブジェクトは、Qdmailによって隠蔽されているので、QdSmtpの機能を余すことなく利用するのが若干難しくなります。

Qdmailでは、SMTPオブジェクトの明示的取り扱いについて、以下の2つの方法があります。
  1. Qdmailが内部生成したQdSmtpインスタンスをユーザーに渡す。
  2. QdSmtpインスタンスをユーザー側でnewし、それをQdmailに渡す。
(※ ここではあくまでもQdSmtpオブジェクト(インスタンス)を明示的に扱いたい場合であって、簡単にsmtp送信するだけならQdSmtpでのSMTP送信の方法の方が簡単かと思います。)


まず、1の方法を説明します。
(ここではPOP BEFORE関連のみを記しますが、他のQdSmtpメソッドに応用可能です。)

1. Qdmailが内部生成したQdSmtpインスタンスをユーザーに渡す。

サンプルコード
必ずバージョン0.9.0a以降でご使用ください。
$param = array(
    'host'=>'smtp.example.com',
    'pop_host'=>'pop.example.com',
    'port'=> 25 ,
    'from'=>'from@example.com',
    'protocol'=>'POP_BEFORE',
    'pop_user'=>'pop_user_id',
    'pop_pass' => 'pop_password',
);

$mail -> smtp(true);
$mail -> smtpServer($param);

$smtp=& $mail->smtpObject();                        // QdSmtpのオブジェクトを取得
$smtp -> pop3TimeFilename( 'henkou_filename.txt' ); // POP制御のためのファイル名変更
$smtp -> pop3ValidMinute( 5 );                      // POP間隔の変更


$message=$itsme.$sender_mess."ここに本文を書きます。";

$flag=$mail ->easyText('address@example.com','宛先','タイトル',$message,'from@example.com');
(PHP5の場合は、& は必要ありません。)

これで、$smtpには、Qdsmtpのオブジェクト(インスタンス)が代入されておりますので、Qdsmtpのメソッドを使用することができます。
この
$smtp=& $mail->smtpObject();                        // QdSmtpのオブジェクトを取得
$smtp -> pop3TimeFilename( 'henkou_filename.txt' ); // POP制御のためのファイル名変更
$smtp -> pop3ValidMinute( 5 );                      // POP間隔の変更
の部分が、QdSmtpを操作している部分ですが、PHP5の場合は、わざわざ、$smtpという変数にいったん代入しなくても、以下のようにすることもできます。
$smtp -> $mail->smtpObject() -> pop3TimeFilename( 'henkou_filename.txt' ); 
$smtp -> $mail->smtpObject() -> pop3ValidMinute( 5 );
続いて、2の方法を説明します。

2. QdSmtpインスタンスをユーザー側でnewし、それをQdmailに渡す。

require_once('qdmail.php');
$message='<font color="red">メールの中身を書きます。</font>';
$mail ->to('address@example.com');
$mail ->subject('メールのテスト');
$mail ->from('from@example.com');
$mail ->html($message);
//ここまでは通常のQdmailの操作

//ここからQdSmtpの操作
require_once('qdsmtp.php');
$smtp = & new qdsmtp;
$param = array(
    'host'=>'smtp.example.com',
    'pop_host'=>'pop.example.com',
    'port'=> 25 ,
    'from'=>'from@example.com',
    'protocol'=>'POP_BEFORE',
    'pop_user'=>'pop_user_id',
    'pop_pass' => 'pop_password',
);
$smtp -> server($param);
$smtp -> pop3TimeFilename( 'henkou_pop_file.txt' );
$smtp -> pop3ValidMinute( 5 ); 

$mail->setSmtpObject($smtp);//QdmailにQdSmtpのインスタンスを渡す

$flag=$mail ->send();    
なお、
$mail->setSmtpObject($smtp);//QdmailにQdSmtpのインスタンスを渡す

$flag=$mail ->send();    
の部分は、PHP5であれば、以下のように書くこともできます。
$flag=$mail -> send($smtp);
このsend($smtp)式は、PHP4でも送信できますが、$smtpインスタンスがディープコピー(clone copy)されるので、若干メモリの無駄使いとなります。