Недавно я попытался использовать функцию php mail для отправки писем с подтверждением, и я был успешным в этом. Однако, когда я добавил несколько вещей в свой скрипт, что-то не работает.
Код ниже – это код, который я получил для работы. Все, что мне нужно для сообщения электронной почты, появляется.
$to = 'Myemail'; $subject = 'Confirmation'; $message = 'This is a test'; $headers = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=iso-8859-1' . "\r\n" . 'Content-Transfer_Encoding: 7bit' . "\r\n\r\n" . 'From: fromemail'."\r\n" . 'Reply-To: replyemail' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers);
Однако, когда я переношу те же заголовки на другой сценарий (ниже), почта поставляет, но есть несколько проблем.
1) В моей почте говорится, что почта ни от кого. 2) Вместо заголовков, появляющихся в информационной области, он отображается как текст в почте. От: от электронной почты. Ответ на: ответ электронной почты. X-Mailer: PHP / 5.2.9.
Скрипт, приведенный ниже, включен в другую написанную мной программу, поэтому мне интересно, является ли это проблемой. Я не думаю, что его синтаксис, потому что его те же заголовки я использовал выше. Я приложил фотографию почты, которую я получаю. http://imgur.com/weNkr
Ваша помощь очень ценится !!!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <HEAD> </HEAD> <body> <?php $message = $_POST['message']; $subject = $_POST['subject']; if ($message != null) { include("connect.php"); $extract = mysql_query("SELECT * FROM `contact` ORDER BY `id`") or die("Error"); $counter = 0; while ($row = mysql_fetch_assoc($extract)) { $email[$counter] = $row['email']; $counter++; } for ($x = 0; $x < $counter; $x++) { $to = $email[$x]; $subject = $subject; $message = $message; $headers = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=iso-8859-1' . "\r\n" . 'Content-Transfer_Encoding: 7bit' . "\r\n\r\n" . 'From: fromemail' . "\r\n" . 'Reply-To: replyemail' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers); echo "EMAIL WAS SENT TO: "; echo $email[$x]; echo "<BR>"; } } ?> </body> </html>
в<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <HEAD> </HEAD> <body> <?php $message = $_POST['message']; $subject = $_POST['subject']; if ($message != null) { include("connect.php"); $extract = mysql_query("SELECT * FROM `contact` ORDER BY `id`") or die("Error"); $counter = 0; while ($row = mysql_fetch_assoc($extract)) { $email[$counter] = $row['email']; $counter++; } for ($x = 0; $x < $counter; $x++) { $to = $email[$x]; $subject = $subject; $message = $message; $headers = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=iso-8859-1' . "\r\n" . 'Content-Transfer_Encoding: 7bit' . "\r\n\r\n" . 'From: fromemail' . "\r\n" . 'Reply-To: replyemail' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers); echo "EMAIL WAS SENT TO: "; echo $email[$x]; echo "<BR>"; } } ?> </body> </html>
Ваша проблема связана с этой строкой:
'Content-Transfer_Encoding: 7bit' . "\r\n\r\n" . //---------------------------------^^^^^^^^^^^ // Two line breaks ends the header block // These remaining headers are seen as part of the message body 'From: fromemail'."\r\n" . 'Reply-To: replyemail' . "\r\n" . 'X-Mailer: PHP/' . phpversion();
У вас есть дополнительный разрыв строки здесь, который завершает часть заголовка сообщения перед заголовком From
и последующими заголовками. Удалите лишние \r\n
.
В качестве дополнительной заметки вам может потребоваться установить ключ -f
для установки конверта с адреса, чтобы разрешить ошибку From nobody для некоторых почтовых клиентов, например:
$from = 'email@example.com'; mail($to, $subject, $message, $headers, '-f' . $from);
Это, конечно, в дополнение к ошибке заголовка, которую исправил Майкл.