PHP mail() 関数を使用してメールを送信する方法

⚡ スマートサマリー

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

  • 📧 mail() 関数の機能: mail() 関数は、スクリプトからメールを送信する際に、受信者、件名、メッセージ、およびオプションのヘッダーを指定します。
  • 📨 SMTPトランスポート: PHPのメール機能はSMTPに依存しており、そのホスト、ポート、認証情報はphp.ini設定ファイルで設定されます。
  • ???? CCとBCC: オプションのヘッダーを使用すると、CC(カーボンコピー)とBCC(ブラインドカーボンコピー)の受信者を追加できますが、BCCは他の受信者には表示されません。
  • 🛡️ 入力のサニタイズ: filter_var に FILTER_SANITIZE_EMAIL と FILTER_VALIDATE_EMAIL を指定すると、問い合わせフォームの入力からのヘッダー挿入がブロックされます。
  • 🔒 セキュアー Mail: SSLまたはTLSで接続を暗号化することで、メッセージの内容が転送中に読み取られるのを防ぐことができます。
  • 🧰 PHPを使用するMailer: PHPMailer は SMTP 認証、添付ファイル、および HTML メールを追加するため、生の mail() よりも信頼性が高くなります。
  • 🤖 AIアシスト: AIツールはPHPを構成できますMailSMTP に関する問題を解決し、メールがスパムフォルダに入らないようにするための修正案を提案します。

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」ファイルを探してください。

  • メモ帳などのテキストエディタでファイルを開きます。この例ではメモ帳を使用します。[編集] メニューをクリックします。

簡単な拡張で Mail Transmission プロトコル

  • 「検索…」メニューをクリックします。

簡単な拡張で Mail Transmission プロトコル

  • 検索ダイアログが表示されます

簡単な拡張で Mail Transmission プロトコル

  • 「次を探す」ボタンをクリックしてください。

簡単な拡張で Mail Transmission プロトコル

[メール機能]の下にあるエントリを探してください。デフォルトの行は通常次のようになります。

  • ; 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);
?>

出力:

簡単な拡張で Mail Transmission プロトコル

注:上記の例では、必須パラメータ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認証、組み込みの暗号化、添付ファイルのサポート、そしてより明確なエラー処理を提供するため、本番環境のメールに推奨される選択肢です。

よくあるご質問

最も一般的な原因は、localhost にメールサーバーが設定されていないことです。php.ini で正しい SMTP 値を設定するか、PHP を使用してください。Mail認証済みのSMTPアカウントを使用してサーバーに接続してください。また、サーバーのエラーログと迷惑メールフォルダも確認してください。

MIME-Versionを1.0、Content-Typeをtext/htmlに設定するヘッダーを追加し、メッセージ本文にHTMLマークアップを挿入します。PHPMailer は、isHTML(true) オプションを設定すると、これを自動的に処理します。

PHP 8.1以降、FILTER_SANITIZE_STRINGは非推奨になりました。表示用に出力をエスケープするにはhtmlspecialchars()を使用するか、値のクリーンアップまたはチェックに応じて、FILTER_VALIDATE_EMAILなどの特定のバリデーターを使用してください。

はい。AIにSMTPホスト、ポート、セキュリティタイプを入力すれば、完全なPHPコードを生成できます。Mail認証、送信者、受信者、およびエラー処理を含むerの設定を行います。認証情報はコードではなく環境変数に保存します。

はい。AIは、SPF、DKIM、DMARCレコードの設定、認証済みSMTP送信者の使用、スパムトリガーワードの回避、有効な送信元アドレスの設定などについてアドバイスを提供し、配信テストを支援します。