контактная форма не отправляет письмо отправителю

я не знаю, является ли это общей проблемой, но я не могу понять, почему это происходит. Я пытаюсь обработать форму и отправить ее по электронной почте. Достаточно просто. Вот PHP-код для него. Когда кто-то заполняет форму, она показывает все, кроме электронной почты отправителя. Выходит как неизвестный отправитель. Кто-нибудь знает, как я могу это исправить? Большое спасибо всем, кто найдет время, чтобы посмотреть на это.

<?php

if($_POST["submit"]) {
$recipient="[email protected]";
$subject="Form to email message";
$Name=$_POST["Name"];
$Phone=$_POST["Phone"]; 
$senderEmail=$_POST["senderEmail"];
$comments=$_POST["comments"];

$mailBody="Name: $Name\nPhone: $Phone\nEmail: $senderEmail\n\n$comments";

mail($recipient, $subject, $mailBody, "From: $Name <$comments>");

$thankYou="<p>Thank you! Your message has been sent.</p>";
}

?>

person Cerebros    schedule 03.05.2015    source источник
comment
Если $senderEmail или $Name или любое из этих значений содержит строку unknown sender, то очевидно, что это значение отправляется в форму. В этом случае этот код делает именно то, для чего он предназначен.   -  person David    schedule 03.05.2015
comment
From это $comments, а не $senderEmail?   -  person chris85    schedule 03.05.2015
comment
@ chris85 - судя по тому, как это выглядит, это определенно проблема :)   -  person Kraang Prime    schedule 03.05.2015


Ответы (2)


chris85 ответил на вопрос в комментариях:

From это $comments, а не $senderEmail?

Однако все не так просто. Вы не можете просто выбрать любой from адрес электронной почты и ожидать, что он будет работать. Почтовый клиент, скорее всего, будет спамить ваши электронные письма, если вы попытаетесь подделать адрес отправителя.

Всякий раз, когда вы меняете заголовок From, вам также необходимо изменить заголовок reply-to, в вашем случае вам, вероятно, следует поместить заголовок From в качестве одного из адресов электронной почты на вашем сервере и изменить только заголовок reply-to на то, что ввел пользователь. Таким образом, ваши сообщения с большей вероятностью не попадут в спам, потому что это не будет выглядеть так, как будто вы пытаетесь быть скрытным.

Другой вариант — использовать простую библиотеку, которая позаботится обо всем этом за вас.

Вот очень простой пример, который я написал: http://geneticcoder.blogspot.com/2014/08/wrapper-for-phps-mail-function.html

person I wrestled a bear once.    schedule 03.05.2015
comment
Я понимаю, что вы сказали. Я также выяснил, почему он давал мне пустой адрес электронной почты для этого поля, так как $Name ‹$comments›); был неправ. Я исправил это, и он отправляет полную информацию, запрашиваемую в форме. Просто адрес отправителя неизвестен, но я могу исправить это в свое время. У меня есть еще один вопрос: когда я пытаюсь использовать форму на своем сервере (бесплатный хостинг), все в порядке. Когда я пытаюсь использовать его на другом сервере (работает через cloudflare), он выдает ошибку шлюза 504. Есть идеи, почему? - person Cerebros; 04.05.2015

Кажется, что заголовок не установлен правильно. Попробуйте что-то вроде этого:

<?php

if($_POST["submit"]) {
  $recipient="[email protected]";
  $subject="Form to email message";
  $Name=$_POST["Name"];
  $Phone=$_POST["Phone"]; 
  $senderEmail=$_POST["senderEmail"];
  $comments=$_POST["comments"];
  $header = "From: $senderEmail" . "\r\n" .
     "Reply-To: $senderEmail" . "\r\n" .
     'X-Mailer: PHP/' . phpversion();

  $mailBody="Name: $Name\nPhone: $Phone\nEmail: $senderEmail\n\n$comments";

  mail($recipient, $subject, $mailBody, $header);

  $thankYou="<p>Thank you! Your message has been sent.</p>";
}

?>

Справочник по функциям php mail можно найти здесь.

person Peter Schneider    schedule 03.05.2015