PHP マニュアル
前のページ |  | 次のページ

# 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().

前のページ | ホーム | 次のページ
ezmlm_hash | 上に戻る | mailparse関数