Я получаю следующие ошибки PHP при использовании формы контактов, которая работала нормально, пока клиент не сказал, что они не получают письма с недели. Поскольку друг помог мне с бэкэндом, и он сейчас недоступен, чтобы спросить, я хотел бы любезно спросить, не могли бы вы дать мне подсказку, что мне нужно исправить.
Ошибки:
`[Wed Feb 17 16:43:44 2016] [warn] [клиент 37.24.118.150] mod_fcgid: stderr: PHP Примечание: неопределенная переменная: заголовки в /var/www/vhosts/wscgmbh.de/httpdocs/php/contact- form-handler.php в строке 29, реферер: http://www.wscgmbh.de/contact.html
[Ср. 17 февраля 16:43:44 2016] [warn] [клиент 37.24.118.150] mod_fcgid: stderr: PHP Предупреждение: mail (): В дополнительном заголовке в /var/www/vhosts/wscgmbh.de/ обнаружены множественные или неправильно сформированные символы новой строки. httpdocs / php / contact-form-handler.php в строке 32, реферер: http://www.wscgmbh.de/contact.html [Ср 17 фев 16:45:18 2016] [warn] [клиент 37.24.118.150] mod_fcgid: stderr: PHP Примечание: неопределенная переменная: заголовки в /var/www/vhosts/wscgmbh.de/httpdocs/php/contact-form -handler.php в строке 29, реферер: http://www.wscgmbh.de/contact.html [Ср. 17 февраля 16:45:18 2016] [warn] [клиент 37.24.118.150] mod_fcgid: stderr: PHP Предупреждение: mail (): В файле Additional_header в /var/www/vhosts/wscgmbh.de/ обнаружены множественные или неправильно сформированные символы новой строки. httpdocs / php / contact-form-handler.php в строке 32, реферер: http://www.wscgmbh.de/contact.html [Среда, 17 февраля 17:02:25 2016] [предупреждение] [клиент 37.24.118.150] mod_fcgid: stderr: PHP Примечание: неопределенный индекс: имя в /var/www/vhosts/wscgmbh.de/httpdocs/php/contact-form -handler.php в строке 12 [Среда, 17 февраля 17:02:25 2016] [warn] [клиент 37.24.118.150] mod_fcgid: stderr: PHP Примечание: неопределенный индекс: электронная почта в /var/www/vhosts/wscgmbh.de/httpdocs/php/contact-form -handler.php в строке 13 [Среда, 17 февраля 17:02:25 2016] [warn] [клиент 37.24.118.150] mod_fcgid: stderr: PHP Примечание: неопределенный индекс: сообщение в /var/www/vhosts/wscgmbh.de/httpdocs/php/contact-form -handler.php в строке 14 [Четверг, 18 февраля 09:40:15 2016] [warn] [клиент 213.23.122.15] mod_fcgid: stderr: PHP Примечание: неопределенная переменная: заголовки в /var/www/vhosts/wscgmbh.de/httpdocs/php/contact-form -handler.php в строке 29, реферер: http://www.wscgmbh.de/contact.html [Четверг, 18 февраля 09:40:15 2016] [warn] [клиент 213.23.122.15] mod_fcgid: stderr: PHP Предупреждение: mail (): множественные или неправильно сформированные новые строки найдены в Additional_header в /var/www/vhosts/wscgmbh.de/ httpdocs / php / contact-form-handler.php в строке 32, реферер: http://www.wscgmbh.de/contact.html`Это код обработчика форм, который работал все время, но вдруг не
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
<?php
$errors = '';
$myemail = '[email protected]';
if(empty($_POST['name']) ||
empty($_POST['email']) ||
empty($_POST['message']))
{
$errors .= "\n Error: all fields are required";
}
$name = $_POST['name'];
$email_address = $_POST['email'];
$message = $_POST['message'];
if (!preg_match(
"/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z] {2,3})$/i",
$email_address))
{
$errors .= "\n Error: Invalid email address";
}
if( empty($errors))
{
$to = $myemail;
$email_subject = "Sie haben eine neue Nachricht von: $name";
$email_body = "Sie haben eine neue Nachricht erhalten, hier sind die Details: \n\nName: $name \nEmail: $email_address \nNachricht: \n$message";
$headers [] .= 'From: WSC-Kontaktformular' . "\r\n";
$headers [] = "Antworten Sie: {$email_address}";
mail($to,$email_subject,$email_body,implode("\r\n",$headers));
//redirect to the 'thank you' page
echo '<script>
alert("Danke für Ihre Nachricht. Wir werden uns bald bei melden!");
window.location = "http://www.wscgmbh.de"</script>';
}
?>
Я не эксперт и не PHP, поэтому я очень надеюсь, что кто-нибудь сможет мне помочь!
Заранее большое спасибо!!!
Проблема здесь в том, что вы пропустили (и объявили заголовки как массив):
(Также проконсультируйтесь с моим редактировать ниже в отношении Antworten Sie:
).
$headers = array();
быть размещенным выше:
$headers [] .= 'From: WSC-Kontaktformular' . "\r\n";
$headers [] = "Antworten Sie: {$email_address}";
Вам также необходимо удалить точку (сцепление) и . "\r\n"
,
implode("\r\n",$headers)
позаботится об этом.
$headers = array();
$headers [] = 'From: WSC-Kontaktformular';
$headers [] = "Antworten Sie: {$email_address}";
В соответствии с примером руководства по почте:
$headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: Sender Name <[email protected]>";
$headers[] = "Bcc: JJ Chong <[email protected]>";
$headers[] = "Reply-To: Recipient Name <[email protected]>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();
mail($to, $subject, $email, implode("\r\n", $headers));
Кроме того, From:
ожидает письмо, а не имя, поэтому из-за него почта может оказаться спамом.
Ссылка:
Если вы хотите использовать точки (конкатенации) и \r\n
s, тогда вам нужно использовать следующее, а также в соответствии с примером из руководства:
// To send HTML mail, the Content-type header must be set
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Additional headers
$headers .= 'To: Mary <[email protected]>, Kelly <[email protected]>' . "\r\n";
$headers .= 'From: Birthday Reminder <[email protected]>' . "\r\n";
$headers .= 'Cc: [email protected]' . "\r\n";
$headers .= 'Bcc: [email protected]' . "\r\n";
// Mail it
mail($to, $subject, $message, $headers);
Редактировать:
Я заметил слова Antworten Sie:
что по-немецки означает «Ответить» (когда я посетил Google Translate).
Если это предназначено, чтобы быть From:
или же Reply-to
, то вы не можете использовать это как часть почтового заголовка, но как Reply-To:
согласно инструкции говорится:
Reply-To: [email protected]
Следовательно, ваш код должен читаться как:
$headers = array();
$headers [] = 'From: WSC-Kontaktformular';
$headers [] = "Reply-To: {$email_address}";
Это также будет способствовать неудаче заголовков.
+ Изменить mail($to,$email_subject,$email_body,implode("\r\n",$headers));
чтобы:
if(mail($to,$email_subject,$email_body,implode("\r\n",$headers))) {
echo "Mail sent.";
} else {
echo "Error.";
}
Если вы видите «Почта отправлена», то mail()
сделал свою работу Смотрите также ваш спам.
добавлять Отчет об ошибках в начало вашего файла (ов), который поможет найти ошибки.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Then the rest of your code
Примечание: Отображать ошибки следует только в постановке, а не в производстве.
Рассмотрите возможность использования PHPMailer или Swiftmailer:
которые являются альтернативами PHP mail()
функция.
Других решений пока нет …