ようこそゲストさん

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

textメール

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);

# kt 2008年09月25日(木) 午後2時40分

ver1.1.2bを利用させていただいております。

ヘッダーの追加で「Return-path」を追加したいと思い、
以下のように設定したのですが、受信したメールには反映されません。

$add_header = array(
'From' => array('from@example.com','送信者名'),
'Return-path' => array('hoge@example.com','送信者名')
);

配列ではなく
'Return-path' => 'hoge@example.com'

としても駄目でした。qdmailを使わず、通常のmail関数での送信の場合は、
Return-pathが設定されているので、当方の環境の問題ではないと思います。

お時間がありましたら、解説いただけないでしょうか。よろしくお願いいたします。

# spok 2008年09月25日(木) 午後4時16分

ktさん

せっかく使っていただいているのにご不便おかけして申し訳ないです。
当方では再現しませんので、以下の情報をお知らせ下さい。

■PHPのバージョン
■OS名称 & バージョン
■MTAの種類(sendmailかPostfixかqmailか)
■お使いのソースコード(公開されて支障がある部分は適当に変更してください。)
■ソースコードの文字コード、改行コード
■デバッグモード http://hal456.net/qdmail/debug での出力内容

特に、デバッグモードでの出力に内容の中にReturn-pathが設定されているかどうかをご確認ください。
なお、現行バージョンでは、return-pathについては、表示名は指定できませんので、


$header = array(
'From' => array('from@example.com','送信者名'),
'Return-path' => 'hoge@example.com',
);

でお試し下さい。

# spok 2008年09月25日(木) 午後4時23分

あ、原因がわかりました。
mail関数をお使いの場合は、MTAが勝手にreturn-pathを設定するので、ヘッダーでreturn-pathを渡しても無視されるようです。
http://hal456.net/qdmail/mta_option
を参考にmtaOption()メソッドにて、-f return@expample.com と指定してみてください。

return-pathについては、もっと簡単に設定できたほうがよさそうなので、次回の更新時には、専用のメソッドを付けたいと思います。
ご指摘ありがとうございました。

# kt 2008年09月25日(木) 午後7時29分

コメントありがとうございます。
mtaOption()メソッドの指定をしたのですが、上手くいきません。

$option = array(
'type'=>'text'
'option'=>array('simpleReplace'=>true,
'mtaOption'=>'-N success,failure -f return@expample.com'),
);

こんな感じで指定しています。


とりあえずこちらの環境を記載します。

■PHPのバージョン:5.2.5
■WinXP SP3(WEBサーバはApache2.0.63)
■MTAの種類:ローカル環境でのテストなので、Radishというソフトを使っています)
■ソースコードの文字コード:UTF-8
■デバッグモード:
Qdmail error: No attach file '' line->2932
Qdmail error: Error happen, see upper line -> 2047
Qdmail error: Error 'TO' Separate mode in Sendbase function , the Address is -> hoge@example.com line -> 1955
Qdmail error: Send Error line -> 1974


※メールサーバの問題かな?と思ったのですが、さくらインターネットのサーバでも
 Return-Pathが指定されていませんでした。


また次回更新の際はよろしくお願いします。

# kt 2008年09月25日(木) 午後7時48分

追記です。
試しに存在しないメールアドレスにメールを送信したのですが、
Fromで指定したメールアドレスに返信されました。

引き続きこちらでも実験・テストしてみます。

# spok 2008年09月25日(木) 午後9時49分

PHPのmail関数自体の制限で、windowsでは、fromとreturn-pathは、強制的に一致となります。
(参考)
http://www.cpa-lab.com/tech/0149#p0.3
http://www.php.net/manual/ja/function.mail.php

かつて自分で記事にしていたのに、すっかり忘れておりました。
ちなみに、私もさくらインターネットの共有サーバーを使用しておりますが、その場合は、FromとReturn-Pathは別個に設定できています。

# spok 2008年09月25日(木) 午後9時50分

あ、ちなみに添付ファイルがない、というエラーがでていらっしゃいますね。

# spok 2008年09月25日(木) 午後10時01分

不十分ですが、マニュアルも修正、追加しておきました。
http://hal456.net/qdmail/return_path

いずれ簡単な方法を考えたいと思います。

# kt 2008年09月26日(金) 午前9時34分

こちらのテスト環境の問題でしたか‥。
知識不足でした。調べていただき、感謝しております。

# fuku 2008年11月02日(日) 午後1時38分

関数qd_send_mailについての使い方、もしくは仕様上対応しているのか質問させてください。

複数宛にTO(BCC,CC)で送信する際にはどのように渡せばよいのでしょうか?
ちなみにmb_send_mailはあて先はカンマ区切りの文字列でいけるそうですが。。
http://server.typepad.jp/dragonfly/2007/05/mb_send_mail_7bc7.html

※ソースコードを見ればよいこのとなのかもしれませんが、作成者の意図を確認させてもらえると勝手な解釈をせず安心してつかえそうなため・・。

お忙しいところ申し訳ございませんが、お答えいただけると幸いです。

# spok 2008年11月02日(日) 深夜0時15分

以下をご覧下さい。
http://hal456.net/qdmail/oopbase

# spok 2008年11月02日(日) 深夜0時16分

OOPと同じように、$toに複数宛先のデータを入れて、qd_send_mailに渡せばよろしいかと思います。

# ふじさん 2010年06月16日(水) 午前11時56分

ふじさんです
qd_send_mail の関数型を使っています

クラス型の複数To,複数Cc,複数Bccは,

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

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

$other_heder['bcc'][] = array('mailto5@example.com' , '表示名5(日本語OK)' );
$other_heder['bcc'][] = array('mailto6@example.com' , '表示名6(日本語OK)' );

$other_heder['from'][] = array('from@example.com' , '配信元(日本語OK)' );

$mail -> easyText(
$address ,
'タイトル(日本語OK)' ,
'本文(日本語OK)',
$other_header
);
でいいのですが
関数型ではどうなりますか?
qd_send_mail( $option , $to , $subject , $message , $from , $qd_attach)
で $toに配列をセットすればtoは複数いけそうな感じですが
Cc,Bccはどこにセットすればいいのでしょうか?

サンプルを教えてください


#  非公開コメント   
  • TB-URL  http://hal456.net/qdmail/045/tb/
  • qd_send_mailでHTMLメールを送る Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte spok
    基本的には、qd_send_mailでのテキストメールの送信方法と同じです。'text'という指定を'html'と変更するだけです。ここでは、サンプルコードのみを記します。添付ファイルを送る場合$to = array( 'address@example.c...
  • Optionの指定方法 Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte spok
    qd_send_mailでは、第1引数に $option を指定することで、様々な設定をすることができます。通常のテキストメールを送るだけであれば、次のように、第1引数には'text'を指定するだけでした。 qd_send_mail( 'text' , $...