2

私は正常に動作し、正常にメールを送信するphpファイル内に小さなphpメーラースクリプトを持っています:

$subject = "subject"; 
$mail_body = "mail body";
$name = "noreply";
$email = "noreply@domain.com";
$recipient = "somebody@domain.com";
$header = "From: ". $name . " <" . $email . ">\r\n";
mail($recipient, $subject, $mail_body, $header);

しかし、これを取り出して独自のファイルにしたり、別のファイルに入れたりすると、うまくいきません。エラー メッセージは表示されず、電子メールは送信されません。

php ini set コマンドはなく、含まれている php ファイルもありません。

より大きなphpスクリプトでは機能するが、単独では機能しない理由についてのアイデアはありますか?

4

1 に答える 1

1

あなたのコードはすべて問題ありません。$recipient の電子メール アドレスを自分のアドレスに置き換えるだけでテストしたところ、問題なく動作しました (会社の電子メール (Exchange サーバー上の Outlook と Hotmail アドレスを使用した別のテスト) でテストしましたが、どちらも問題なく動作し、受信トレイに到達しました)。

  • ただし、$mail_body の改行が「\r\n」ではなく「\n」であることを確認してください。メッセージパラメータに関するドキュメントで読むことができるように:

各行は LF (\n) で区切る必要があります。行は 70 文字を超えてはなりません。

  • $name と $emailに、<、>、および改行 (\r、\n、または \r\n) などの禁止文字が含まれていないことを確認してください。Michael が指摘するように、そこに新しい行があると、電子メール インジェクション攻撃につながる可能性があります。お問い合わせフォームがスパム送信者のメール プラットフォームとして使用されるのは望ましくありません。

mail()は高度なメーリングでは非常に扱いにくいため、開発を容易にするPHPMailerなどのメール ライブラリの使用を検討する必要があります。これらのライブラリのほとんどは、これらの攻撃と標準を既にカバーしています...

于 2010-02-23T20:04:41.500 に答える