ここでは、メール送信/受信ライブラリの使用方法を説明します。
SyLメール送信ライブラリは、PHP標準のmail関数をラップしたタイプと
ソケットによりメールサーバーに直接接続して送信するタイプの2パターンあります。
(詳細には sendmail コマンドで直接送信する方法もありますが、mail関数方式と大差ありません。)
これは送信方法を提供するクラスで、送信データとなるメッセージはメールメッセージクラスで管理され、 メッセージを送信方法に送信する流れになります。
・添付ファイルを含めることも可能です。(Base64エンコード)
・現状はテキストメールのみですが、将来的にHTMLメールにも対応予定です。
メールを送信する簡単なコードを示します。
(1) PHP標準のmail関数をラップしたタイプ
// ライブラリをインクルード SyL_Loader::lib('Mail'); // SyLフレームワークを使用しない場合は直接インクルード // include_once SYL_INCLUDE_DIR . '/lib/SyL_Mail.php'; // メール送信オブジェクトを作成 $mail =& SyL_Mail::factorySend(); // メールメッセージオブジェクトを作成 $message =& $mail->createMessage(); $message->setSubject('サンプルメールの件名'); $message->setFrom('k.watanabe@syl.jp', 'サンプルメールの差出人'); $message->addTo('k.watanabe@syl.jp'); $message->setBody('サンプルメールの本文'); // 送信実行 $mail->send($message);
メールクラスをインクルードしてインスタンスを取得した後、 メールの内容を格納するメールメッセージオブジェクトを作成し、 宛先/件名/本文などをセットして、sendメソッドにより送信する流れです。
宛先(addTo)、CC(addCc)、BCC(addBcc)は、複数回実行することにより、複数人に送信することができます。
注意点としては、PHPのメール送信関数(mail)でメールが送信できる環境かどうか、 事前に確認してください(コマンドライン上でmail(sendmail)コマンドから確認してもOK)。 送信できない場合は、ネットワークやメールサーバーの設定が 関係している場合が多いので、最初に正常にメールが送れるか確認してください。
また、sendmail コマンド方式を使用する場合は、
// メール送信オブジェクトを作成 $mail =& SyL_Mail::factorySend('sendmail'); // Sendmailパスをセット(デフォルト: /usr/lib/sendmail) $mail->setSendmailPath('/path/to/sendmail'); ...
のようにして、インスタンスを作成し、Sendmailパスをセットします。 メールメッセージオブジェクトを取得した後の流れは、mail関数を使用する場合と同様です。
(2) メールサーバーに直接接続して送信するタイプ
下記例では、メールサーバー「example.com」の「25」番ポートに接続して送信を行います。
// ライブラリをインクルード SyL_Loader::lib('Mail'); // SyLフレームワークを使用しない場合は直接インクルード // include_once SYL_INCLUDE_DIR . '/lib/SyL_Mail.php'; // メール送信オブジェクトを作成 $mail =& SyL_Mail::factorySend('smtp'); // メールサーバーホスト名セット(デフォルト: localhost) $mail->setHost('example.com'); // メールサーバーポート番号セット(デフォルト: 25) $mail->setPort('25'); // メールメッセージオブジェクトを作成 $message =& $mail->createMessage(); $message->setSubject('サンプルメールの件名'); $message->setFrom('k.watanabe@syl.jp', 'サンプルメールの差出人'); $message->addTo('k.watanabe@syl.jp'); $message->setBody('サンプルメールの本文'); // 送信実行 $mail->send($message);
基本的な流れは、「PHP標準のmail関数をラップしたタイプ」と同じですが、 メールクラスのインスタンスを取得するパラメータとホスト/ポート番号をセットするところが異なります。
メールサーバーに直接接続して送信するタイプでは、SMTP AUTH に対応しています。 SMTP AUTH を使用する場合、下記のようにアカウント名とパスワードをセットしてから送信します。
... $mail->setUser('{アカウント名}', '{パスワード}'); ...
こちらの注意点も同様で、プログラムを実行するサーバーから指定したメールサーバーにネットワークが繋がり、 かつメール送信が許可されていることを確認してください。 (telnetコマンドでメールサーバーのポートに接続して送信してみるのが確実です)
メールにファイルを添付する場合は、サーバー上にあるファイルを添付します。 send メソッドを実行する前に、事前にメールメッセージオブジェクトの addFile メソッドで添付ファイルに取り込みます。
$message->addFile('/path/to/attachfile');
複数回実行することにより、複数ファイルを添付することができます。
また、2つめの引数には、コンテンツタイプを指定可能です。(デフォルト: application/octet-stream)
添付ファイルを送信する場合のコンテンツタイプ(Content-Type)は、「multipart/mixed」となります。
「PHP標準のmail関数をラップしたタイプ」での送信処理は、1回の送信でメールサーバーに接続と切断を行いますが、 「メールサーバーに直接接続して送信するタイプ」は、メールサーバーに接続したまま続けて送信することができるので、 連続してメールを送信する際は、前者より処理速度と効率の面で優れています。
// ライブラリをインクルード SyL_Loader::lib('Mail'); // SyLフレームワークを使用しない場合は直接インクルード // include_once SYL_INCLUDE_DIR . '/lib/SyL_Mail.php'; // 連続送信メールアドレス $senders = array(); $senders[] = 'k.watanabe@syl.jp'; $senders[] = 'k.watanabe1@syl.jp'; ... // メール送信オブジェクトを作成 $mail =& SyL_Mail::factorySend('smtp'); // メールサーバーホスト名セット(デフォルト: localhost) $mail->setHost('example.com'); // メールサーバーポート番号セット(デフォルト: 25) $mail->setPort('25'); // メールサーバーに接続 $mail->connect(); foreach ($senders as $sender) { // メールメッセージオブジェクトを作成 $message =& $mail->createMessage(); $message->setSubject('サンプルメールの件名'); $message->setFrom('k.watanabe@syl.jp', 'サンプルメールの差出人'); $message->addTo($sender); $message->setBody('サンプルメールの本文'); // 送信実行 $mail->send($message); } // メールサーバーから切断 $mail->quit();
SyLメール受信ライブラリは、ソケットによりメールサーバーに直接接続して受信を行います。 受信したメッセージは、メールメッセージクラスに格納され、 そこから受信データ(宛先/件名/本文など)を取得する流れになります。
・受信には、アカウント名とパスワード(認証情報)をセットする必要があります。
・添付ファイルの取得もできます。(Base64エンコード)
・HTMLメール内容の取得可能。
メールを受信する簡単なコードを示します。
// ライブラリをインクルード SyL_Loader::lib('Mail'); // SyLフレームワークを使用しない場合は直接インクルード // include_once SYL_INCLUDE_DIR . '/lib/SyL_Mail.php'; // メール受信オブジェクトを作成 $mail =& SyL_Mail::factoryReceive(); // メールサーバーホストをセット(デフォルト: localhost) $mail->setHost('example.com'); // ポート番号をセット(デフォルト: 110) $mail->setPort('110'); // 認証情報をセット $mail->setUser('account_name', 'password'); // 接続開始 $mail->connect(); echo "メールボックス総数: " . $mail->getTotalNums() . "\n"; echo "メールボックス総バイト数: " . $mail->getTotalBytes() . "\n"; // メールボックスから全メッセージタイトルを表示 foreach ($mail->getList() as $num => $bytes) { $message =& $mail->receive($num); echo $num . " - " . $message->getSubject() . "\n"; } // 接続終了 $mail->quit();
メールクラスをインクルードしてインスタンスを取得した後、メールサーバーの情報をセットし、接続します。 接続後 getList メソッドにより、メールボックス内にあるメールのメッセージ番号を取得してから、 メッセージ番号に対して、receive メソッドにより受信します。
受信したメッセージは、メールメッセージクラスとして返され、そのプロパティから受信データ(宛先/件名/本文など)を取得します。
メールメッセージクラスは、メールの送受信時のメールの内容を保持するクラスです。 送信時はデータをセットし、受信時はデータを取得します。
下記はメールメッセージクラスのインターフェイスです。
データ名 | メソッド | 引数/戻り値 | |
---|---|---|---|
送信元 | setFrom | string string |
メールアドレス メールアドレス別名(オプション) |
getFrom | array | 例) array('test@example.com', 'test') | |
宛先 | addTo | string string |
メールアドレス メールアドレス別名(オプション) |
getTo | array | 例) array([0] => array('test@example.com', 'test')) | |
CC | addCc | string string |
メールアドレス メールアドレス別名(オプション) |
getCc | array | 例) array([0] => array('test@example.com', 'test')) | |
BCC | addBcc | string string |
メールアドレス メールアドレス別名(オプション) |
getBcc | array | 例) array([0] => array('test@example.com', 'test')) | |
件名 | setSubject | string | 件名 |
getSubject | string | 件名 | |
本文 | setBody | string | 本文 |
getBody | array | 例) array( [body] => 'テストメール', [type] => 'text/plain; charset="ISO-2022-JP"', [transfer_encoding] => '7bit', [name] => null, [file] => null ); |
|
添付ファイル | addFile | string string |
添付ファイルのパス コンテンツタイプ(オプション) |
getBody | array | 例) array( [body] => null, [type] => 'image/jpeg', [transfer_encoding] => 'base64', [name] => 'example.jpg', [file] => {添付内容} ); ※添付内容は、バイナリの場合もあります。 |
|
その他ヘッダ | addHeader | string string |
ヘッダのキー ヘッダの値 |
getHeader | string string |
ヘッダのキー(引数) ヘッダの値 |
本メールライブラリは、日本語環境での使用を前提に作成されていますので、 デフォルトでメールメッセージの文字コードは「ISO-2022-JP」、パラメータ文字コードはカレントの mbstring.internal_encoding です。
ただし、これらは変更可能です。変更する場合はメールオブジェクトをインスタンス化した直後に、文字コードをセットします。
... // セット/取得するパラメータ文字コードを変更 $mail->setInternalEncode('EUC-JP'); // メールメッセージ文字コードを変更 $mail->setMailEncode('UTF-8'); ...
また、言語設定のデフォルトは、カレントの mbstring.language です。 ただし、設定されていない場合は、「ja」となります。
... // 言語設定を変更 $mail->setLanguage('en'); ...