mail() 関数は PHP に組み込まれており、ウェブサーバー から直接メールを送信するために使用されます。通知、コンタクトフォームメッセージ、注文確認、およびその他のタイプのメッセージを送信するための簡単な方法です。

外部ライブラリを使用せずに基本的なメール機能に適しています。

mail() の動作

mail() 関数を呼び出すと、PHP はサーバーにインストールされているシステムのメール転送エージェント (MTA) にメールを渡します (通常は Sendmail または Postfix)。その後、MTA はメッセージを処理し、指定されたアドレスに配信します。

 構文

mail(to, subject, message, headers, parameters);

 パラメータ

パラメータ説明
$to受信者のメールアドレス。カンマで区切って複数のアドレスを指定できます。
$subjectメールの件名。改行を含めてはいけません。
$messageメッセージの本文。
$headersFrom、Reply-To、Cc、Bcc などの追加ヘッダー。
$parametersSendmail の送信者を指定するなどの追加パラメータ (-f)。

簡単な例

<?php
$to = "user@example.com";
$subject = "Test Email";
$message = "Hello! This is a test email sent using PHP.";
$headers = "From: webmaster@yourdomain.com";

mail($to, $subject, $message, $headers);
?>

 重要な注意事項

1. From: ヘッダーは必須

From: ヘッダーを指定しないと、ほとんどのメールサーバーはメッセージを疑わしいまたはスパムとして拒否します。

$headers = "From: noreply@yourdomain.com";

2. 複数行メッセージのフォーマット

メッセージ内の行を分けるには rn を使用します:

$message = "Hello,rnrnThank you for your order.rnrnBest regards,rnYour Team";

3. 複数のヘッダー

Reply-To、Cc、Bcc などの複数のヘッダーを分けるには rn を使用します:

$headers = "From: admin@yourdomain.comrn";
$headers .= "Reply-To: support@yourdomain.comrn";
$headers .= "Cc: someone@yourdomain.comrn";

例: HTML メールの送信 (テキストのみ)

mail() 関数はネイティブで添付ファイルをサポートしていません。しかし、HTML メールを送信したり、手動でコンテンツタイプを設定したりできます:

$headers  = "MIME-Version: 1.0rn";
$headers .= "Content-type: text/html; charset=UTF-8rn";
$headers .= "From: info@yourdomain.com";
$message = "<h1>Hello!</h1><p>Your order has been received.</p>";
mail("user@example.com", "Order Confirmation", $message, $headers);

 一般的な問題と解決策

問題原因 / 解決策
メールが配信されないFrom: ヘッダーが欠落しているか、サーバー IP がブラックリストに載っている
メールが全く送信されないMTA がインストールされていない (例: Sendmail/Postfix が必要)
エラー: mail() が無効になっていますphp.ini で mail() が無効になっている (ホスティングポリシーによることが多い)
ロシア語のテキストが ???? と表示されるヘッダーで文字セットが UTF-8 に設定されていない
メールがスパムに入るFrom が不正、SPF/DKIM がない、またはドメインが誤設定されている

 結論

mail() 関数は、PHP スクリプトから直接メールを送信するための基本的ですが強力なツールです。以下の特徴があります:

  • 使いやすい
  • 追加のライブラリを必要としない
  • 内部通知、コンタクトフォーム、およびオートレスポンダーに適している

ただし、その制限も考慮してください:

  • サーバーのメール設定に依存する
  • 添付ファイルをサポートしていない
  • 一部の共有ホスティング環境ではデフォルトで無効になっている可能性がある

定期的にメールを送信する予定がある場合は、サーバーが送信メール用に適切に設定されていることを確認してください (Sendmail/Postfix がインストールされ、SPF/DKIM レコードが設定され、php.ini で mail() が有効になっていること)。