mail

(PHP 3, PHP 4 , PHP 5)

mail -- メールの送信

説明

bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])

mail()messageで 指定されたメッセージをtoで指定された 受信者に自動的にメールします。toの中の 各アドレスをカンマで区切ることにより、複数の受信者を指定できます。 添付書類付きのemailおよび特別なコンテンツ型のemailはこの関数で送 信可能です。これは、MIMEエンコーディングにより可能です。詳細な 情報については、 Zend articleまたは PEAR Mime Classesを参照下さい。

以下のRFCも有用でしょう。 RFC 1896, RFC 2045, RFC 2046, RFC 2047, RFC 2048, RFC 2049

mail() は、メールを配送エージェントに 渡すことに成功した場合に TRUE 、それ以外の場合に FALSE を返します。

警告

mail()のWindows版実装は、UNIX版実装とは 多くの点で違います。 第一に、メッセージの生成にローカルのバイナリは使用せず、 ソケットを通じて直接操作するだけです。 これはMTAがネットワークソケットをlistenしている 必要があるということを意味します(ローカルホスト、リモートマシン どちらでもかまいません)。 第二に、From:, Cc:, Bcc:, Date:のようなカスタムヘッダは MTAが初期段階で解釈するの ではなくPHPによってパースされます。 PHP < 4.3 では Cc: (大文字小文字は区別されます)ヘッダ要素だけがサポートされていました。 PHP >= 4.3 では全てヘッダ要素をサポートし、 もはやcase-sensitive(大文字小文字を区別する)ではありません。

例 1. メールを送信する

<?php
mail
("joecool@example.com", "My Subject", "Line 1\nLine 2\nLine 3");
?>

4番目の文字列が指定された場合、その文字列はヘッダの最後に挿入され ます。通常、これはヘッダを追加する際に使用されます。複数のヘッダ を追加する場合は、改行で区切ります。

注意: 複数のヘッダを区切る場合、\r\nを使用する必要 があります。ただし、いくつかのUnix MTA(Mail transfer agents)では 改行文字(\n)だけでも動作します。 Win32システムでは、Cc: ヘッダは大文字小文字を区別し、 Cc:と書く必要があります。

例 2. 追加ヘッダを付加してメールを送信する

<?php
mail
("nobody@example.com", "the subject", $message,
     
"From: webmaster@{$_SERVER['SERVER_NAME']}\r\n"
    
."Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n"
    
."X-Mailer: PHP/" . phpversion());
?>

パラメータadditional_parametersは、追加の パラメータをメール送信プログラムに渡す際に使用可能です。 メール送信プログラムは、設定オプション sendmail_pathにより設定されます。例えば、 sendmailを使用する際に-fオプションを使って エンベロープのsenderアドレスを設定する際に 使用できます。この方法でエンベロープのsenderヘッダを設 定する際、'X-Warning'ヘッダが付加されないようにWebサーバを実行し ているユーザをsendmail設定に追加しておく必要があるかもしれません。

例 3. 追加ヘッダ及び追加コマンドラインパラメータを指定してメールを送信

<?php
mail
("nobody@example.com", "the subject", $message,
     
"From: webmaster@{$_SERVER['SERVER_NAME']}", "-fwebmaster@{$_SERVER['SERVER_NAME']}");
?>

注意: この5番目のパラメータは、PHP 4.0.5で追加されました。 PHP4.2.3以降、セーフモード の場合このパラメータは無効です。もし使用しようとすると、 mail()はwarningメッセージを発行して FALSE を返します。

複雑なemailメッセージを作成する際に簡単な文字列結合を使用すること も可能です。

例 4. 複雑なemailを送信する

/* 送信先 */
$to  = "Mary <mary@example.com>" . ", " ; // カンマで区切る
$to .= "Kelly <kelly@example.com>";

/* 題名 */
$subject = "Birthday Reminders for August";

/* メッセージ */
$message = '
<html>
<head>
<title>Birthday Reminders for August</title>
</head>
<body>
<p>Here are the birthdays upcoming in August!</p>
<table>
<tr>
  <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
</tr>
<tr>
  <td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
</tr>
<tr>
  <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
';

/* HTMLメールを送信する場合、Content-typeヘッダを指定可能です。 */
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

/* 追加ヘッダ */
$headers .= "To: Mary <mary@example.com>, Kelly <kelly@example.com>\r\n";
$headers .= "From: Birthday Reminder <birthday@example.com>\r\n";
$headers .= "Cc: birthdayarchive@example.com\r\n";
$headers .= "Bcc: birthdaycheck@example.com\r\n";

/* ここでメールを送信する */
mail($to, $subject, $message, $headers);

注意: toまたはsubjectに 改行文字を含まないようにして下さい。さもないと、正常に動作しない 可能性があります。

注意: to引数には "Something <someone@example.com>" の形式の メールアドレスを与えることはできません。 MTA(特にWindows環境下の)と通信する際にmail関数はこれを適切にパースできません。

See also imap_mail().