Open Source Web Development Tutorials - Dev Shed
PHPでメール送信機能を実装しよう
(2009/02/26公開)
PEAR::Mailを使ってメールを送信する
PHPのmail()関数を使えば比較的簡単にメールを送信できますが、いくつか足りない点があります。そのひとつは、メールアドレスの検証です。つまり、メールを送信する前に、メールアドレスの有効性を検証していないのです。
この機能は、PEARのmailクラスに組み込まれています。このクラスを利用するには、まずPEARをインストールして、mailパッケージをダウンロードしてください。すでにこのパッケージがpearディレクトリにある場合は、シェルプロンプトまたはDOSプロンプトで、以下のコマンドを実行するだけです。
pear install mail
インストールが正常に完了していれば、「installation OK」のメッセージが表示されます。あるいは以下のコマンドを実行すれば、パッケージのインストール状況を確認できます。
pear list
上記のコマンドは、インストール済みのすべてのパッケージをリストアップして、以下のように出力します。
では、クラスを使ってみましょう。
<?php
require "Mail.php";
$to = array("nita@mysite.com");
$headers = array(
'From' => "duimpie@hissite.com",
'Cc' => "xuros@siteways.com",
'Subject' => "Using PEAR::Mail to send email"
);
$body = <<< BODY
Hi Nita,
Just testing how to send email from a PHP script with the PEAR::Mail class.
Your eager to learn friend
Duimpie
BODY;
$mail = Mail::factory('mail');
$mail->send($to, $headers, $body);
?>
上記のコードは、テキスト形式メッセージとヘッダーを送信するだけの内容です。メッセージの送信には、組み込み関数であるmail()を使用します。さて、赤でハイライトした行、特に「factory(ファクトリ)」の文字に注意してください。PEAR::Mailクラスは、選択肢として、複数のファクトリ(mail、sendmail、smtp)を提供しています。オブジェクト指向型プログラミングを利用している人なら分かるはずですが、ファクトリーを使うことで、同じアプリケーションプログラミングインターフェース(API)を介してさまざまなテクノロジーの読み込みや実装を行います。Mail()クラスの場合は、Mailオブジェクトを生成するとき、メールサーバーとの交信に必要なクラス要素を読み込むことができます。これらのクラス要素は、以下を実行します。
・mailファクトリ:メールを送信するための組み込み関数mail()を使用する
・Sendmailファクトリ:sendmailプログラムと直接に交信を起動する
・Smtpファクトリ:サーバーに直接に接続するソケットを使用する。また、認証をサポートする。そのため、当然、交信の安全性という効果がある
もっと複雑なメールメッセージの場合は、PEARが提供する多目的インターネットメール拡張仕様(Multipurpose Internet Mail Extension、あるいは一般的にMIME)クラスを使用して、HTML形式のメールメッセージを構築できます。クラス名はPEAR::Mail_mimeです。以下のように使います。
<?php
require "Mail.php";
require "Mail/mime.php";
$to = array("nita@mysite.com");
$headers = array(
'From' => "duimpie@hissite.com",
'Cc' => "xuros@siteways.com",
'Subject' => "Using PEAR::Mail to send email"
);
$mime = new Mail_mime();
$txtBody = <<< BODY
Hi Nita,
Just testing how to send email from a PHP script with the PEAR::Mail class.
Your eager to learn friend
Duimpie
BODY;
$mime->setTXTBody($txtBody);
$htmlBody = <<< BODY
<html><body>
<h1>Hi Nita,</h1><br>
Just testing how to send email from a PHP script with the PEAR::Mail class.
Your eager to learn friend
Duimpie
<br>
</body></html>
BODY;
$mime->setHTMLBody($htmlBody);?>
$body = $mime->get();
$headers = $mime->headers($headers);
$mail = Mail::factory('mail');
$mail->send($to, $headers, $body);
上記のコード例は先に挙げた例と同じ基本構造ですが、HTML書式設定だけが異なります。テキスト形式のバージョンもありますから、受信側のサーバーがHTML形式のメッセージに対応していなくても、メッセージを送信できます。
Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.









