Как воспроизвести отправителю электронную почту с PHP вместо CGI-Mailer - PullRequest
0 голосов
/ 04 февраля 2020

Я пробовал слишком много разных способов получения ответа от $ _request [email], но он продолжает отправлять письма с $ из CGI-mailer, хотя все тело на моей почте работает нормально ... Я Я пробовал слишком много способов, но я не могу найти, где моя проблема .. Я посмотрел несколько ответов на этот вопрос здесь, но никто не решает мою проблему .. это мой код.

<?php
$subject = 'Contacact from website'; 
$to = 'contact@myhosting.com'; 
$emailTo = $_REQUEST['email'];

// an email address that will be in the From field of the email.
$name = $_REQUEST['name'];
$email = $_REQUEST['email']; // i can't get this going to the reply-to section on the mail
$phone = $_REQUEST['phone'];
$msg = $_REQUEST['message'];

$email_from = $name.'<'.$email.'>';

$headers = "MIME-Version: 1.1";
$headers .= "Content-type: text/html; charset=utf-8";
$headers .= 'From:  ' . $fromName . ' <' . $fromEmail .'>' . " \r\n" .
     'Reply-To: '.  $fromEmail . "\r\n" .
     'X-Mailer: PHP/' . phpversion();

// Send email
mail($sendTo, $subject, $emailText, implode("\n", $headers));

$message .= 'Name : ' . $name . "\n";
$message .= 'Email : ' . $email . "\n";
$message .= 'phone : ' . $phone . "\n";
$message .= 'Message : ' . $msg;

if (@mail($to, $subject, $message, $email_from)) {
    // Transfer the value 'sent' to ajax function for showing success message.
    echo 'sent';
} else {
    // Transfer the value 'failed' to ajax function for showing error message.
    echo 'failed';
}
?>

и это моя форма:

<form name="contactForm" id='contact_form' method="post" action='email.php'>
    <div class="row">
        <div class="col-md-4">
            <div id='name_error' class='error'>write your name</div>
            <div>
                <input type='text' name='name' id='name' class="form-control" placeholder="Name">
            </div>

            <div id='email_error' class='error'>Write a valid email</div>
            <div>
                <input type='email' name='email' id='email' class="form-control" placeholder="
     email">
            </div>

            <div id='phone_error' class='error'>Write a phone number.</div>
            <div>
                <input type='tel' name='phone' id='phone' class="form-control" placeholder="Your name">
            </div>
        </div>
        <div class="col-md-8">
            <div id='message_error' class='error'>Please write your message here</div>
            <div>
                <textarea name='message' id='message' class="form-control"
                    placeholder="Message or quotation"></textarea>
            </div>
        </div>

        <div class="col-md-12">
            <p id='submit'>
                <input type='submit' id='send_message' value='Enviar' class="btn btn-line">
            </p>
            <div id='mail_success' class='success'>We received your message :)</div>
            <div id='mail_fail' class='error'>Please try again :/</div>
        </div>
    </div>
</form>

1 Ответ

2 голосов
/ 04 февраля 2020

В том, что вы опубликовали, есть несколько неправильных вещей.

Во-первых, первая строка этого блока кода:

$message .= 'Name : ' . $name . "\n";
$message .= 'Email : ' . $email . "\n";
$message .= 'phone : ' . $phone . "\n";
$message .= 'Message : ' . $msg;

не должна иметь начальную точку для $message .= , он должен читаться как:

$message = 'Name : ' . $name . "\n";

Тогда эта строка:

if (@mail($to, $subject, $message, $email_from))

Поскольку вы используете $email_from в качестве последнего аргумента, mail(), как вы сделали для другого экземпляр, в который вы отправляете почту, использует действительный From: с адресом электронной почты, так как он приходит «от», когда второй не содержит его, вы только объявили его как $email_from = $name.'<'.$email.'>';.

Вам нужно будет добавить From:, как вы сделали для первого экземпляра почтового сообщения.

Примечание: символ @ подавляет ошибки. Возможно, вы захотите удалить это во время тестирования / разработки.

Обратитесь к руководству по функции mail() для получения более подробной информации:

...