デコメール

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)されるので、若干メモリの無駄使いとなります。

管理者に常時BCC

2008/06/30 未分類 spok
Qdmailでは、管理者に対し常にBCCをつける機能があります。
投稿フォームなどで、メール送信を監視したい場合などに、ログ機能などと合わせてご活用ください。

$mailにはQdmailのインスタンス(オブジェクト)が入っているものとします。
常にadmin@example.comにBccする。
  $mail -> allwaysBcc( 'admin@example.com' );
常時Bccモードをオフにする。
  $mail -> allwaysBcc( null );

常時Bccモードに設定されたメールアドレスを取得する。
  $mail -> allwaysBcc();

もっと楽?な使い方

しかし、上記の方法はユーザースクリプト中を想定したものであり、その場合は、$mail->bcc( 'admin@...')とした場合と、あまり変わりません。

Qdmail本体スクリプトのそのものを次のように変えておくというのが有効的な使い方かも知れません。
var $allways_bcc = null;
を探しだし、以下に変更。
var $allways_bcc = 'admin@example.com';