PHP mail() 関数を使用してメールを送信する方法
⚡ スマートサマリー
PHPのmail関数は、サーバーのSMTP設定を使用してPHPスクリプトから直接メールを送信する組み込み関数です。このチュートリアルでは、mail()関数の構文とパラメータ、php.iniでのSMTPの設定、filter_varを使用したユーザー入力のサニタイズ、セキュアメールの送信、およびPHPの使用方法について説明します。Mail確実な配送のために。

PHP メールとは何ですか?
PHPのmail関数は、PHPスクリプトからメールを送信するために使用されるPHPの組み込み関数です。
メール関数は次のパラメータを受け入れます。
- メールアドレス
- 件名
- メッセージ
- CCまたはBCCのメールアドレス
PHPメールを使用する理由とタイミング
メール機能は多くの場面で役立ちます。
- これは、重要なイベントをユーザーに通知するための費用対効果の高い方法です。
- 提供されたコンテンツを電子メールで送信するお問い合わせフォームを Web サイトに用意して、ユーザーが電子メールで連絡できるようにします。
- 開発者はこれを利用して、システムエラーをメールで受信できます。
- ニュースレターの購読者にメールを送信するために使用できます。
- この機能を使えば、パスワードを忘れたユーザーにパスワードリセットリンクを送信できます。
- この機能を使えば、アクティベーションリンクや確認リンクをメールで送信できます。これは、ユーザー登録時やメールアドレスの確認時に便利です。
PHP を使用したメールの送信
PHPのメール送信関数には、以下の基本的な構文があります。
<?php mail($to_email_address,$subject,$message,[$headers],[$parameters]); ?>
ここに、
- 「$to_email_address」はメール受信者のメールアドレスです
- 「$subject」はメールの件名です
- 「$message」は送信するメッセージです。
- 「[$headers]」は省略可能です。CCやBCCなどの情報を含めるために使用できます。
- CCはカーボンコピーの略です。関係者にコピーを送りたい場合に使用します。例えば、企業に送った苦情メールを苦情処理委員会にもCCで送ることができます。
- BCCは「ブラインドカーボンコピー」の略です。CCと似ていますが、BCC欄に記載されたメールアドレスは他の受信者には表示されません。
簡単な拡張で Mail Transmission プロトコル (SMTP)
PHPメールはシンプル Mail Transmission メールを送信するためのプロトコル (SMTP)。
ホスティングサーバーの場合、SMTP設定は既に設定済みです。
SMTPメールの設定は、PHPインストールフォルダ内の「php.ini」ファイルから構成できます。
ローカルホストで SMTP 設定を構成するには、XAMPP を使用していると仮定します。 Windows「C:\xampp\php」ディレクトリにある「php.ini」ファイルを探してください。
- メモ帳などのテキストエディタでファイルを開きます。この例ではメモ帳を使用します。[編集] メニューをクリックします。
- 「検索…」メニューをクリックします。
- 検索ダイアログが表示されます
- 「次を探す」ボタンをクリックしてください。
[メール機能]の下にあるエントリを探してください。デフォルトの行は通常次のようになります。
- ; SMTP = ローカルホスト
- ; smtp_port = 25
SMTPとsmtp_portの前のセミコロンを削除し、SMTPをあなたの SMTPサーバー そして、SMTPポートを指定します。設定は以下のようになります。
- SMTP = smtp.example.com
- smtp_port = 25
注:SMTP設定は、ご利用のウェブホスティングプロバイダーから入手できます。 サーバーが認証を必要とする場合は、次の行を追加してください。
- auth_username = example_username@example.com
- auth_password = example_password
新しい変更を保存して再起動します アパッチ サーバー。
PHP Mail 例:
それでは、簡単なメールを送信する例を見てみましょう。
<?php $to_email = 'name@example.com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail function'; $headers = 'From: noreply@example.com'; mail($to_email,$subject,$message,$headers); ?>
出力:
注:上記の例では、必須パラメータ4つのみを使用しています。上記の架空のメールアドレスは、実際のメールアドレスに置き換えてください。
メールのユーザー入力のサニタイズ
上記の例では、簡潔にするために、電子メール アドレスやその他の詳細についてソース コード内でハードコードされた値を使用しています。
ユーザーが詳細情報を入力して送信するお問い合わせフォームを作成する必要があると仮定しましょう。
- ユーザーは、意図的または偶発的にヘッダーにコードを挿入することがあり、その結果、スパムメールが送信される可能性があります。
- このような攻撃からシステムを保護するには、メールを送信する前に値をサニタイズして検証するカスタム関数を作成できます。
filter_var組み込み関数を使用して、メールアドレスを検証およびサニタイズするカスタム関数を作成しましょう。filter_var関数は、ユーザー入力データのサニタイズと検証に使用されます。
基本的な構文は次のとおりです。
<?php filter_var($field, SANITIZATION_TYPE); ?>
ここに、
- 「filter_var(…)」は検証およびサニタイズ関数です。
- 「$field」はフィルタリングするフィールドの値です。
- 「SANITIZATION_TYPE」は、フィールドで実施される消毒の種類です。例えば、以下のようなものがあります。
- フィルター検証メール 有効なメールアドレスの場合は true を、無効なメールアドレスの場合は false を返します。
- フィルター_サニタイズ_メール – メールアドレスから不正な文字を削除します。そのため、不要な文字が含まれているアドレスは info@domain.com のように短縮されます。
- フィルター消毒_URL – 不正な文字を削除します URLs のように、https://www.example.com のようなクリーンなアドレスを残します。
- FILTER_SANITIZE_STRING – 文字列値からタグを削除します。例えば、 「am bold」は「am bold」になります。なお、このフィルターはPHP 8.1以降では非推奨です。代わりにhtmlspecialchars()を使用してください。
以下のコードは、カスタム関数を使用して安全なメールを送信します。
<?php function sanitize_my_email($field) { $field = filter_var($field, FILTER_SANITIZE_EMAIL); if (filter_var($field, FILTER_VALIDATE_EMAIL)) { return true; } else { return false; } } $to_email = 'name@example.com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail function'; $headers = 'From: noreply@example.com'; // check if the email address is invalid $secure_check = sanitize_my_email($to_email); if ($secure_check == false) { echo "Invalid input"; } else { // send email mail($to_email, $subject, $message, $headers); echo "This email is sent using PHP Mail"; } ?>
出力:
セキュアー Mail
電子メールは送信中に意図しない受信者によって傍受される可能性があります。
これにより、メールの内容が意図しない受信者に漏洩する可能性があります。
セキュアメールはこの問題を解決します transmitSSLまたはTLSを使用した暗号化接続を介して電子メールを送信する。たとえば、ポート465でのSMTP over SSL、またはポート587でのSTARTTLSなど。
暗号化はメッセージを送信前に難読化するため、意図した受信者のメールサーバーだけがそれを読み取ることができます。
PHPMailer: メールに代わるより良い選択肢
実際のアプリケーションでは、ほとんどの開発者はPHPを使用しますMail生の mail() 関数の代わりに er ライブラリを使用します。PHPMailerは外部のSMTPサーバーで認証を行うため、配信率が大幅に向上し、添付ファイルやHTMLメールの送信も簡単になります。
Composerを使ってインストールし、以下に示すように認証済みで暗号化されたSMTP接続を介してメールを送信してください。
<?php use PHPMailer\PHPMailer\PHPMailer; require 'vendor/autoload.php'; $mail = new PHPMailer(true); $mail->isSMTP(); $mail->Host = 'smtp.example.com'; $mail->SMTPAuth = true; $mail->Username = 'user@example.com'; $mail->Password = 'secret'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->setFrom('noreply@example.com', 'My App'); $mail->addAddress('name@example.com'); $mail->Subject = 'Testing PHPMailer'; $mail->Body = 'This email is sent using PHPMailer over SMTP'; $mail->send(); ?>
mail() と比較すると、PHPMailerはSMTP認証、組み込みの暗号化、添付ファイルのサポート、そしてより明確なエラー処理を提供するため、本番環境のメールに推奨される選択肢です。






