【PHP8.x】mail関数の使い方
mail関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
mail関数は、PHPスクリプトから電子メールを送信する機能を提供する関数です。この関数を使用すると、プログラム上で指定した宛先に、件名と本文を含むシンプルなテキストメールを送ることができます。
メールを送信するために、少なくとも宛先のメールアドレス、メールの件名、そしてメールの本文を引数として指定する必要があります。加えて、送信元(From)、CC(Carbon Copy)、BCC(Blind Carbon Copy)などの追加ヘッダー情報をオプションで設定することも可能です。
mail関数は、PHP自身が直接SMTP(Simple Mail Transfer Protocol)サーバーと通信するのではなく、PHPが動作しているサーバーにインストールされているメール転送エージェント(MTA)を利用してメールの送信を依頼します。このため、メール送信の成否や詳細な挙動は、PHPの設定(php.ini)やサーバーに設定されたMTAの設定に大きく依存します。
関数は、メールの送信処理が正常にキューに追加された場合はtrueを、何らかの理由で失敗した場合はfalseを返します。しかし、trueが返されたとしても、メールが最終的に受信者に届くことを保証するものではありません。添付ファイルやHTML形式のメール、SMTP認証を伴うメールなど、より複雑な要件を持つメール送信には、このmail関数だけでは対応が難しいことが多く、通常はより高機能なメール送信ライブラリの利用が推奨されます。
構文(syntax)
1mail(string $to, string $subject, string $message, array|string $additional_headers = [], string $additional_params = ""): bool
引数(parameters)
string $to, string $subject, string $message, array|string $additional_headers = [], string $additional_params = ""
- string $to: 送信先のメールアドレスを指定する文字列
- string $subject: メール件名を指定する文字列
- string $message: 送信するメール本文を指定する文字列
- array|string $additional_headers = []: 追加のメールヘッダーを指定する配列または文字列。例: "From: sender@example.com\r\nReply-To: reply@example.com"
- string $additional_params = "": mail() 関数に渡す追加のコマンドラインパラメータを指定する文字列
戻り値(return)
bool
メール送信の成否を返します。成功した場合はtrue、失敗した場合はfalseを返します。
サンプルコード
PHP mail関数でメールを送信する
1<?php 2 3/** 4 * PHPの組み込みmail関数を使用してメールを送信します。 5 * この関数は、サーバーに設定されているMTA(メール転送エージェント、例: Postfix, Sendmail)に依存します。 6 * 開発環境ではMTAの設定が必要な場合があります。 7 * 8 * @param string $to 送信先のメールアドレス。 9 * @param string $subject メールの件名。 10 * @param string $message メールの本文。 11 * @param string|array $additionalHeaders オプションの追加ヘッダー。'From: sender@example.com\r\nContent-Type: text/plain; charset=UTF-8' などの形式。 12 * @param string $additionalParams オプションの追加パラメータ。通常はsendmailコマンドのオプションなどで使用されます。 13 * @return bool メールがMTAに正常に渡された場合はtrue、失敗した場合はfalseを返します。 14 * 実際にメールが受信者に届いたかどうかは保証しません。 15 */ 16function sendEmail( 17 string $to, 18 string $subject, 19 string $message, 20 string|array $additionalHeaders = [], 21 string $additionalParams = "" 22): bool { 23 // PHPの組み込みmail関数を呼び出し、メールを送信キューに入れます。 24 // mail関数がfalseを返す場合、通常はサーバーのメール設定に問題があるか、 25 // 送信に必要な情報が不足していることを示します。 26 $isSent = mail($to, $subject, $message, $additionalHeaders, $additionalParams); 27 28 return $isSent; 29} 30 31// --- 以下は sendEmail 関数の使用例です --- 32 33// 送信先メールアドレス (実際の受信者のアドレスに置き換えてください) 34$recipient = "your_recipient@example.com"; 35// メールの件名 36$subject = "PHP mail関数 テストメール"; 37// メールの本文 38$body = "こんにちは。\n\nこれはPHPのmail関数で送信されたテストメールです。\n\nよろしくお願いいたします。"; 39 40// 追加ヘッダーの設定 41// Fromヘッダーは送信元アドレスを指定するために重要です。 42// Content-Typeヘッダーは文字化けを防ぎ、メールの形式を指定するために推奨されます。 43$headers = "From: your_sender@example.com\r\n"; 44$headers .= "Reply-To: your_sender@example.com\r\n"; 45$headers .= "MIME-Version: 1.0\r\n"; 46$headers .= "Content-type: text/plain; charset=UTF-8\r\n"; 47 48// 追加パラメータ (通常は空白で問題ありませんが、例えばエンベロープFromの指定などで使用) 49// 例: $params = '-fyour_sender@example.com'; 50$params = ""; 51 52// sendEmail関数を呼び出してメールを送信します 53if (sendEmail($recipient, $subject, $body, $headers, $params)) { 54 echo "メールが正常に送信キューに入れられました。\n"; 55 echo "送信先: " . $recipient . "\n"; 56 echo "件名: " . $subject . "\n"; 57} else { 58 echo "メールの送信に失敗しました。\n"; 59 echo "サーバーのメール設定(MTA)を確認してください。\n"; 60} 61 62?>
PHPのmail関数は、ウェブサーバーからメールを送信するための組み込み機能です。この関数は、サーバーに設定されているMTA(メール転送エージェント、例えばPostfixやSendmailなど)を利用してメールを送信キューに入れます。したがって、メール送信にはサーバー側でMTAが適切に設定されている必要があります。
サンプルコードでは、mail関数をより使いやすくするためのsendEmail関数を定義しています。sendEmail関数は、最初の引数$toに送信先のメールアドレス、$subjectに件名、$messageにメールの本文を指定します。これらはメール送信に必須の情報です。オプションである$additionalHeadersには、送信元(From:)や返信先(Reply-To:)、文字コード(Content-Type: text/plain; charset=UTF-8)などの追加情報を設定できます。特に文字化けを防ぐため、Content-Typeヘッダーの設定は重要です。$additionalParamsは、MTAに渡す追加オプションを指定しますが、通常は空白で問題ありません。
mail関数は、メールがMTAに正常に引き渡された場合にtrueを、何らかの理由で失敗した場合はfalseを返します。この戻り値は、メールがMTAに渡されたことのみを示し、実際に受信者のメールボックスに届いたかどうかは保証しません。サンプルコードでは、sendEmail関数の戻り値を確認し、送信が成功したか失敗したかのメッセージを表示しています。
PHPのmail関数は、サーバーのMTA(メール転送エージェント)設定に依存するため、動作しない場合はMTAの設定を確認してください。関数がtrueを返しても、メールが実際に受信者に届いたことは保証されません。スパム判定を避け、正しく表示されるよう、From:ヘッダーとContent-Type: text/plain; charset=UTF-8ヘッダーを必ず設定しましょう。また、外部からの入力値を直接メールの引数に使用する際は、セキュリティのために適切に検証・サニタイズが必要です。本番環境では、より機能が豊富で信頼性の高いPHPMailerなどの外部ライブラリの利用も検討すると良いでしょう。
PHP mail関数でテストメールを送信する
1<?php 2 3/** 4 * mail()関数を使用してシンプルなテキストメールを送信します。 5 * 6 * 注意: このスクリプトをWebサーバー上で実行するには、 7 * php.iniファイルでsendmailなどのメール送信設定が正しく構成されている必要があります。 8 * ローカル環境では通常、メールは送信されません。 9 * 10 * @return void 11 */ 12function send_test_email(): void 13{ 14 // 日本語の文字化けを防ぐための設定 15 mb_language('Japanese'); 16 mb_internal_encoding('UTF-8'); 17 18 // --- メールの基本情報を設定 --- 19 20 // 宛先メールアドレス 21 $to = 'recipient@example.com'; 22 23 // メールの件名 24 $subject = 'PHPからのテストメール'; 25 26 // メールの本文 27 $message = "これはPHPのmail()関数を使用して送信されたテストメールです。\n"; 28 $message .= "このメールが届けば、設定は正常です。\n"; 29 30 // --- 追加ヘッダー情報を設定 --- 31 // From: 送信元を指定します。指定しないと送信できないサーバーもあります。 32 // Content-Type: メールの形式と文字コードを指定します。日本語にはUTF-8が推奨されます。 33 $additional_headers = [ 34 'From' => 'sender@example.com', 35 'Reply-To' => 'sender@example.com', 36 'Content-Type' => 'text/plain; charset=UTF-8', 37 ]; 38 39 // mail()関数を実行してメールを送信 40 // 成功した場合は true、失敗した場合は false を返します。 41 // mb_send_mail() は mail() を内部で呼び出し、日本語の件名や本文を自動でエンコードしてくれます。 42 if (mb_send_mail($to, $subject, $message, $additional_headers)) { 43 echo "メールは正常に送信キューに追加されました。"; 44 } else { 45 echo "メールの送信に失敗しました。サーバーの設定を確認してください。"; 46 } 47} 48 49// 関数を呼び出してメール送信処理を実行 50send_test_email();
PHPのmail関数は、指定した宛先にメールを送信するための基本的な機能を提供します。サンプルコードでは、日本語の文字化けを防ぐため、mb_language()とmb_internal_encoding()で適切な文字コードを設定し、内部でmail関数を利用するmb_send_mail関数を用いています。
この関数には主に以下の情報が必要です。
第一引数の $to には宛先メールアドレスを文字列で指定します。
第二引数の $subject にはメールの件名を文字列で指定します。
第三引数の $message にはメールの本文を文字列で指定します。
第四引数の $additional_headers はオプションで、送信元アドレスやメールの形式といった追加情報を配列または文字列で設定できます。サンプルではFromで送信元を指定し、Content-Typeで「テキスト形式、UTF-8文字コード」と指定することで、日本語のメールが正しく表示されるようにしています。
関数は、メールの送信処理がサーバーのキューに正常に追加された場合に論理値のtrueを、何らかの理由で失敗した場合にはfalseを戻り値として返します。この戻り値を利用して、プログラム内で送信の成否を判断し、適切な次の処理を行うことができます。
ただし、この機能を利用するには、WebサーバーのPHP設定(php.ini)において、Sendmailなどのメール送信プログラムが適切に構成されている必要があります。設定が不十分な場合、メールは実際に送信されませんのでご注意ください。
PHPのmail関数は、php.iniのメール送信設定が必須であり、ローカル環境では機能しません。サーバー上で動作確認を行う必要があります。日本語メールは文字化けを防ぐため、mb_language()とmb_internal_encoding()でエンコーディングを設定し、mb_send_mail()を使うべきです。送信元を示すFromヘッダーや、文字コードを指定するContent-Type: charset=UTF-8などの追加ヘッダーは、メール到達や表示に不可欠です。mb_send_mail()はメールの送信キューへの追加成否を返します。戻り値で必ず結果を確認し、失敗時はサーバー設定を確認してください。