0

Bootstrap メールフォームの使用。フォームは、送信者の電子メール アドレスの代わりにサーバー名を表示する from 変数を除いて、メールを配信します。

$name 変数を「from」として表示する方法、または少なくとも、サーバー名ではなく電子メールの送信元のドメイン名を表示する方法を誰かが説明できますか?

 <?php
    if (isset($_POST["submit"])) {
        $name = $_POST['name'];
        $email = $_POST['email'];
        $business = $_POST['business'];
        $phone = $_POST['phone'];
        $message = $_POST['message'];
        $from = 'From website of xxxxxx'; 
        $to = 'user@somedomainname.com'; 
        $subject = 'New Message ';

        $body = "From: $name\n E-Mail: $email\n Business Name: $business\n  Phone: $phone\nMessage: $message";

        // Check if name has been entered
        if (!$_POST['name']) {
            $errName = 'Please enter your name';
        }

        // Check if email has been entered and is valid
        if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $errEmail = 'Please enter a valid email address';
        }

         // Check if business has been entered
        if (!$_POST['business']) {
            $errBusiness = 'Please enter your business or organization name';
        }

         // Check if phone has been entered
        if (!$_POST['phone']) {
            $errPhone = 'Please enter your phone number';
        }

        //Check if message has been entered
        if (!$_POST['message']) {
            $errMessage = 'Please enter your message';
        }

// If there are no errors, send the email
if (!$errName && !$errEmail && !$errMessage) {
    if (mail ($to, $subject, $body, $from)) {
        $result='<div class="alert alert-success">Thank You! I will be in touch.</div>';
    } else {
        $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later.</div>';
    }
}
    }
?>
4

2 に答える 2

0

関数の呼び出しに問題がある可能性がありますmail

ドキュメントが言うように、

bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

さらに興味深いことに、

additional_headers (オプション)

メールヘッダーの末尾に挿入する文字列。

これは通常、追加のヘッダー (From、Cc、および Bcc) を追加するために使用されます。複数の余分なヘッダーは、CRLF (\r\n) で区切る必要があります。外部データを使用してこのヘッダーを構成する場合は、不要なヘッダーが挿入されないようにデータをサニタイズする必要があります。

ノート:

additional_headers にはメール ヘッダー インジェクション保護がありません。したがって、ユーザーは、指定されたヘッダーが安全で、ヘッダーのみが含まれていることを確認する必要があります。つまり、複数の改行を入れてメール本文を開始しないでください。

ノート:

メールを送信する場合、メールには From ヘッダーが含まれている必要があります。これは additional_headers パラメータで設定するか、php.ini でデフォルトを設定できます。

これを行わないと、次のようなエラー メッセージが表示されます。From ヘッダーは、Windows では Return-Path も設定します。

ノート:

メッセージが受信されない場合は、LF (\n) のみを使用してみてください。一部の Unix メール転送エージェント (特に » qmail) は、LF を CRLF に自動的に置き換えます (これにより、CRLF を使用すると CR が 2 倍になります)。» RFC 2822 に準拠していないため、これは最後の手段です。

于 2016-01-13T08:14:31.090 に答える
0

php.ini ファイルに行を追加して、サーバーのルート ディレクトリにドロップするだけで済みました。mod の既存のスクリプト from: 行に $headers を追加する必要はありませんでした。

from: 行に実際の送信者のアドレスを表示することを好む人もいますが、送信された各フォームは別のユーザーからのものであるため、これはスパム フィルターに大混乱をもたらすことがわかりました。私はこれを修正する方法があると確信しています.今、その方法を100%確信しています.

sendmail_path="/usr/sbin/sendmail -t -i -f webmaster@somedomainname.com"
于 2016-01-13T08:33:16.460 に答える