mail — メールを送信する
説明
bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]] )メールを送信します。
パラメータ
- to
-
メールの受信者。
» RFC 2822 を満たす書式でなければ なりません。例えば以下のようなものです。user@example.com user@example.com, anotheruser@example.com User <user@example.com> User <user@example.com>, Another User <anotheruser@example.com> - subject
-
送信するメールの表題。
注意 改行を含んではいけません。含めてしまうとメールが正しく送信できません。 - message
-
送信するメッセージ。
改行コードは LF (\n) となります。各行の長さは 70 文字を超えては いけません。注意 (Windows のみ)PHP が SMTP サーバと直接通信をする際、ピリオドから 始まる行は無視されます。これを防ぐには、行頭のピリオドを ピリオド 2 つに置き換えてください。 <?php
$text = str_replace("\n.", "\n..", $text);
?> - additional_headers(オプション)
-
メールヘッダの最後に挿入される文字列。
通常、これは追加のヘッダ(From、Cc、Bcc)のために用いられます。 複数のヘッダを追加する場合は CRLF(\r\n)で区切ります。
注意: メールを送信する際には、必ず From ヘッダが含まれていなければなりません。 additional_headers パラメータで指定するか、 あるいは php.ini にデフォルト値を指定します。
指定しなかった場合は、以下のようなエラーメッセージが返ります Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing 。 Windows では、From ヘッダを設定すると Return-Path も設定されます。
注意: メッセージが受信されなかった場合には、LF(\n)のみを使ってみてください。 Unix の MTA の中には、自動的に LF を CRLF に変換してしまう ものがあります(もし CRLF を利用していた場合、CR が重複してしまいます)。 ただし、これは最後の手段です。というのも、これは » RFC 2822 に違反しているからです。 - additional_parameters(オプション)
-
パラメータ additional_parameters は、
追加のパラメータをメール送信プログラムに渡す際に使用可能です。
メール送信プログラムは、設定オプション
sendmail_path により設定されます。例えば、
sendmail を使用する際に -f オプションを使って
エンベロープの sender アドレスを設定する際に使用できます。
この方法でエンベロープの sender ヘッダ(-f)を設定する際は、 'X-Warning' ヘッダが付加されないように Web サーバの実行ユーザを sendmail 設定に追加しておく必要があるかもしれません。 sendmail を利用している場合、これは /etc/mail/trusted-users で設定します。
返り値
メール送信が受け入れられた場合に TRUE 、それ以外の場合に FALSE を返します。メールの配送が受け入れられたかどうかが基準であることに注意しましょう。 メールが実際にあて先に届いたかどうかでは「ありません」。
変更履歴
バージョン | 説明 |
---|---|
4.3.0(Windows のみ) | すべてのカスタムヘッダ(From、Cc、Bcc や Date など)がサポート されるようになり、大文字・小文字を区別しないようになりました (カスタムヘッダは MTA でパースされるのではなく PHP でパースされます。 PHP < 4.3 では Cc ヘッダのみがサポートされており、大文字・小文字が 区別されていました)。 |
4.2.3 | safe_mode 時には additional_parameters パラメータを無効に しました。もし用いられた場合には mail() 関数は 警告メッセージを出して FALSE を返します。 |
4.0.5 | additional_parameters パラメータが追加されました。 |
例
例 1034. メールを送信するmail() を用いて単純なメールを送信する。
<?php
// 本文
$message = "Line 1\nLine 2\nLine 3";
// 1 行が 70 文字を超える場合のため、wordwrap() を用いる
$message = wordwrap($message, 70);
// 送信する
mail('caffinated@example.com', 'My Subject', $message);
?>
例 1035. 追加ヘッダを付加してメールを送信する
基本ヘッダに加え、MUA に From および Reply-To アドレスを通知する。
<?php
$to = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>
例 1036. 追加ヘッダ及び追加コマンドラインパラメータを指定してメールを送信する
sendmail_path を用いてメールを送信する際に利用する 追加パラメータとして、additional_parameters が用いられます。
<?php
mail('nobody@example.com', 'the subject', 'the message', null,
'-fwebmaster@example.com');
?>
例 1037. HTML メールを送信する
mail() を用いて HTML メールを送信することも可能です。
<?php
// 複数の受信者を指定
$to = 'aidan@example.com' . ', '; // カンマに注意
$to .= 'wez@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);
?>
注意: HTML などの複雑な形式のメールを送信する場合は、PEAR パッケージ » PEAR::Mail_Mime を利用することを推奨します。
注意
注意: mail() の Windows 版実装は、Unix 版実装とは 多くの点で違います。 第一に、メッセージの生成にローカルのバイナリは使用せず、 ソケットを通じて直接操作するだけです。 これは MTA がネットワークソケットを listen している 必要があるということを意味します(ローカルホスト、リモートマシン どちらでもかまいません)。第二に、 From: や Cc:・ Bcc:・ Date: のようなカスタムヘッダは MTA ではなく PHP によってパースされます。
そのため、to 引数には "Something <someone@example.com>" 形式の メールアドレスを与えることはできません。 MTA と通信する際に mail コマンドはこれを適切にパースできません。
注意: 添付ファイルや特殊な本文(HTML など)を含むメールも、この関数で 送信可能です。これは、MIME エンコーディングによって実現されています。 詳細な情報は » Zend の記事 または » PEAR Mime クラス を参照ください。
注意: mail() 関数は、大量のメールをループ内で送信するには 向いていないことに注意しましょう。この関数は 1 通のメールを送信するたびに SMTP ソケットをいったん閉じて開きなおします。これは非効率的です。
大量のメールを送信する場合は、 » PEAR::Mail および » PEAR::Mail_Queue パッケージを参照ください。
注意: 以下の RFC も有用です。 » RFC 1896、 » RFC 2045、 » RFC 2046、 » RFC 2047、 » RFC 2048、 » RFC 2049 および » RFC 2822
参考
imap_mail() |
» PEAR::Mail |
» PEAR::Mail_Mime |
メール関数(Mail)
導入
mail() 関数によりメールを送信できるようになります。要件
メール関数を使用可能にするには、PHP のコンパイル時点でシステム上の sendmail バイナリにアクセスできなければなりません。 postfix や qmail など他のメールプログラムを使用してる場合には、 それらのソフトに付随する適当な sendmail ラッパを使用するように 気をつけてください。 PHP は sendmail を探す際にまず PATH を見ます。次に /usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib の順で探します。PATH を通して sendmail を使用可能な 状態にしておくことが強く推奨されます。 また、コンパイルされた PHP が sendmail バイナリにアクセスできる権限を 持っていなければなりません。インストール手順
PHP コアに含まれるため、 追加のインストール無しで使用できます。実行時設定
php.ini の設定により動作が変化します。表 147. Mail 設定オプション
名前 | デフォルト | 変更の可否 | 変更履歴 |
---|---|---|---|
SMTP | "localhost" | PHP_INI_ALL | |
smtp_port | "25" | PHP_INI_ALL | |
sendmail_from | NULL | PHP_INI_ALL | |
sendmail_path | NULL | PHP_INI_SYSTEM |
PHP_INI_* 定数の詳細および定義については 付録 G. php.ini ディレクティブ を参照してください。
以下に設定ディレクティブに関する 簡単な説明を示します。
- SMTP string
-
Windows 環境のみで使用されます:
mail() 関数でメールを送信する際に使用する
SMTP サーバのホスト名または IP アドレス。
- smtp_port int
-
Windows 環境のみで使用されます:
SMTP 設定で指定したサーバに接続するポート番号で、
デフォルトは 25 です。PHP 4.3.0 以降でのみ利用可能です。
- sendmail_from string
-
Windows 環境で、PHP から送信されるメールにおいて "From:"
に使用するメールアドレスを指定します。
このディレクティブは、"Return-Path:" ヘッダも設定します。
- sendmail_path string
-
sendmail プログラムを探すパスを指定します。
通常、/usr/sbin/sendmail または
/usr/lib/sendmail です。
configure は、このパスを探し、
デフォルト値として設定しますが、
これで上手くいかない場合にはこのオプションで設定する必要があります。
sendmail を使用していないシステムは、 使用するメールシステムが提供する sendmail のラッパ/代替品を、 必要に応じてこのディレクティブに設定する必要があります。例えば、» Qmail ユーザは、通常 /var/qmail/bin/sendmail または /var/qmail/bin/qmail-inject に設定します。
qmail-inject では、 メールを正しく処理するためのオプション設定は不要です。
このディレクティブは Windows 環境でも動作します。指定された場合は smtp および smtp_port・ sendmail_from の値は無視され、 ここで指定したコマンドが実行されます。
リソース型
リソース型は定義されていません。定義済み定数
定数は定義されていません。目次
- ezmlm_hash — EZMLM で必要なハッシュ値を計算する
- mail — メールを送信する
固有名詞の分類
Weblioに収録されているすべての辞書からMailを検索する場合は、下記のリンクをクリックしてください。

「Mail」に関係したコラム
-
FX(外国為替証拠金取引)のチャート分析ソフトMT4(Meta Trader 4)では、インディケーターを起動中にある数値に達した時にメール通知することができます。メール通知をするには、MT4でのメー...
- Mailのページへのリンク