データベースから一気に差し込み

2008/08/02 未分類 spok

データベース連動

データベースから、データをフェッチ(Fetch)した場合、多くの場合、次のようなデータ構造になっているはずです。
(もちろん、フィールド名やデータは例です。)
$data = array(
	array('name'=>'スポック','id'=>1,'mail'=>'spok@example.com',
              'age'=>'24','address1'=>'東京都品川区','address2'=>'三田0-0-0',
              'tel'=>'03-0000-0000',),
	array('name'=>'カーク','id'=>2,'mail'=>'kirk@example.com',
              'age'=>'20','address1'=>'大阪府大阪市','address2'=>'難波0-0-0',
              'tel'=>'06-0000-0000',),
	array('name'=>'ウフーラ','id'=>3,'mail'=>'urhoora@example.com',
              'age'=>'22','address1'=>'愛知県名古屋市','address2'=>'中央区近衛0-0-0',
              'tel'=>'045-0000-0000',),
	array('name'=>'マッコイ','id'=>4,'mail'=>'maccoy@example.com',
              'age'=>'50','address1'=>'鹿児島県鹿児島市','address2'=>'中区聖0-0-0',
              'tel'=>'092-0000-0000',),
);
このデータを一気に、Qdmailに差し込むことで、上記のデータの場合、4人にそれぞれ個人別にカスタマイズしたメールを一度に送信することができます。
通常、$to として、宛先を指定する引数に、$dataをします。
そして、件名や本文で、置き換えたい項目を%記号で囲みます。
サンプルをみるのが早いでしょう。上記の$dataが入っているものとします。
上記の$dataのメールアドレス部分を自分が管理している別のメールアドレスに入れて試してください。
require_once('qdmail.php');

$subject="こんにちは、%name%さん。";

$body="%name%さんの登録内容をお送りします。

名前:%name%
id: %id%
メールアドレス:%mail%
年齢:%age%
住所:%address1% %address2%
TEL: %tel%
専用URL:http://example.com/login/?id=%id%

このように、qd_send_mailでは、簡単にインサートメールを送信することができます。";

$from = array( 'from@example.com' , '送り元日本語名' );
$option = array('type'=>'text','option'=>array('simpleReplace'=>true));

$flag = qd_send_mail( $option , $data , $subject , $body , $from );
この
$option = array('type'=>'text','option'=>array('simpleReplace'=>true));
の部分が、SimpleReplace機能をONにする箇所です。

フィールド名と連動

%でデータベースのフィールド名を囲めば(%フィールド名%)、自動的にリプレースされるわけですが、どのフィールドのデータをメール宛先の送信者表示名にするか、どれが送信先のメールアドレスなのかを指定する必要があります。
デフォルトでは、次のようになっています。
フィールド名意味
mail送信先メールアドレス
name送信先表示名
しかし、あなたのデータベースでは、必ずしも、上記のフィールド名になっておらず、メールアドレスが、mail_address だったり 表示名が pen_name だったりするかも知れません。
その時、SimpleReplaceは、正常に動作しますが、Qdmailは肝心の送信先アドレスを見失ってしまいます。
ですので、mail,nameではなない場合は、次の指定を加えてください。
$op = array( 'simpleReplace'=>true,
             'addressField'=>array('mail_address','pen_name')
 );

$option = array('type'=>'text','option'=>$op);

テンプレート機能

2008/08/02 未分類 spok

SimpleReplace

Qdmailでは、SimpleReplaceという機能があります。

これは、件名や本文に「%name%」という置き換え記号を置いておくと、自動的に、送信先名の名前に置き換わるというものです。
この機能を利用すると、データベースから取ってきたデータを、送る相手によってカスタマイズしながら送信することができます。

例えばQdmaiでは、以下のようなメールの一斉送信が簡単にできます。

こんにちは●●さん。シンプルリプレースのテストです。
きょうは、お得なお知らせです。
●●さんは、前回、▲▲を■■■にお求めになりましたが、今回は、さらにパワーアップした商品のご紹介です。

配信解除はこちら
http://example.com/store_mail/cancel?id=●●●&hash=××××

関数型でSMTP送信

2008/08/02 未分類 spok

SMTP送信のメリット

qd_send_mailの一番の特徴は、関数型なのに、SMTP送信できる点です。
SMTP送信を選択すると、phpのmail関数は使いません。
外部SMTPサーバーを指定しておけば、開発環境と運用環境が異なる時にも、コード変更なしで対応できるほか、そもそもメール送信サーバーがない環境でメールを送信することができます。
  1. 可搬性がよい
  2. スピードが速い
  3. mail関数、送信サーバーのクセを排除できる(より安全なコードを書くことができる)

サンプルコード

テキストメール&添付ファイルの場合

OP25制限があるプロバイダに、SMTP認証(Plain)で繋ぐ例です。
通常の送信ポート25でも大丈夫ですし、POP Before SMTPもできます。
SMTPパラメーターの詳しい設定の仕方はQdsmtpの初期設定をご覧下さい。

qdmail.php と Qdsmtp.php をインクルードパスが通ったディレクトリに置いてください。QdmailはQdsmtpを自動的にインクルードしますが、この自動インクルードがうまくいかない場合は、ユーザーにて明示的にインクルードしてください。
require_once('qdmail.php');

$param = array(
    'host'=>'smtp.example.com',
    'port'=> 587 ,
    'from'=>'return_path_address@example.com',
    'protocol'=>'SMTP_AUTH',
    'user'=>'userID_for_SMTP_server',
    'pass' => 'password',
);

$to = array( 'address@mail456.com' , '宛先日本語名' );
$from = array( 'from@example.com' , '送り元日本語名' );

$subject = 'メールのテスト(テキスト)';
$body = "ここに本文を書きます。";
$attach = array( 'test.jpg' , '添付ファイル名.jpg' );

$option = array('type'=>'text','smtp'=>$param);

$flag =qd_send_mail( $option , $to , $subject , $body , $from , $attach , $debug);
$optionのキー'type'で、メールの種類を指定します。
HTMLメールを送信する場合は次のようにします。
$option = array('type'=>'html','smtp'=>$param);
デコメール(デコレーションメール)を送信する場合は次のようにします。
$option = array('type'=>'deco','smtp'=>$param);

その他の指定は、関数型の基本をご参照ください。