Intereting Posts
Вопрос о том, как должны работать перенаправления Android: загрузка изображения на сервере с помощью php mysql_query () возвращает true, но mysql_num_rows () и mysql_fetch_array () дают "недействительные ошибки ресурса Как визуализировать javascript с другого сайта, внутри приложения PHP? Как редактировать и сохранять пользовательские файлы конфигурации в Laravel? ловить все ошибки и перенаправлять на страницу с помощью php Может ли PHP cURL получить заголовки ответов и тело в одном запросе? Обновление Magento занимает слишком много времени и никогда не завершается Пользовательские сеансы с Joomla Как получить имя пользователя в joomla 3.2 Функция статической переменной внутри не может содержать ссылку на singleton iOS загружает 2 веб-представления в зависимости от первого запуска пользователя Сохранение изображения прямо в каталог на PHP? PHP написать в файл Остановка загрузки – PHP

Форма PHP – не получение электронной почты

Я не понимаю, почему я не получаю электронную почту из формы после заполнения простой формы. После нажатия кнопки «Отправить» она перенаправляется на страницу благодарности без проблем, но не по электронной почте.

HTML

<form class="action" name="form1" method="POST" action="_sendmail2.php" onSubmit="return CheckAll(this);"> <label class="nick-2">Full Name:</label><br> <input type="text" class="name" name="full_name"> <label class="nick">Email Address:</label><br> <input type="text" class="email" name="email"><br> <div class="radio-toolbar"> <input type="radio" id="radio1" name="agent_type" value="Buyer" checked> <label for="radio1">Buyer</label> <input type="radio" id="radio2" name="agent_type" value="Seller"> <label for="radio2">Seller</label> <input type="radio" id="radio3" name="agent_type" value="Investor"> <label for="radio3">Investor</label> </div><br> <input type="submit" class="btn" value="SUBMIT" name="Submit"> </form> 

PHP (

 <?php $to = "cluneborg@hotmail.com"; $subject = "New Agent Inquries"; $full_name = $_POST['full_name']; $email = $_POST['email']; $agent_type = $_POST['agent_type']; if($_SERVER['REQUEST_METHOD']=="POST") { $full_name=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['full_name'])); $email=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['email'])); $agent_type=str_replace ( array("\n"), array(" <br>"),trim($_REQUEST['agent_type'])); $contentmsg=stripslashes("<br><b><font style=color:#CC3300>$subject</font></b><br> <table width=708 border=0 cellpadding=2 cellspacing=1 bgcolor=#CCCCCC> <tr> <td width=165 align=right valign=top bgcolor=#FFFFFF><B>Full Name: </b> </td> <td width=565 align=left valign=top bgcolor=#FFFFFF> $full_name</td> </tr> <tr> <td width=165 align=right valign=top bgcolor=#FFFFFF><B>Email Address: </b> </td> <td width=565 align=left valign=top bgcolor=#FFFFFF> $email</td> </tr> <tr> <td width=165 align=right valign=top bgcolor=#FFFFFF><B>Type of Agent:</b> </td> <td width=565 align=left valign=top bgcolor=#FFFFFF> $agent_type</td> </tr> </table> "); $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n"; $headers .= 'To: Eric <eluneborg@gmail.com>' . "\r\n"; $headers .= 'From: Texas Real Estate Agent Website' . "\r\n"; if(mail($to,$subject,$contentmsg,$headers)){ header("Location: http://www.magnixsolutions.com/clients/tas/thanks.html"); } else { echo "Mail was not sent!"; } } ?> 

Иногда он отправляет электронную почту на мой hotmail и большую часть времени он получает (проверяется на cpanel)

 This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: cluneborg@hotmail.com Domain magnixsolutions.com has exceeded the max defers and failures per hour (5/5 (55%)) allowed. Message discarded. 

(Протестировано). У вас было несколько проблем с вашим кодом.

  1. Самое главное, это @ символ в @mail – это не будет выполняться, его нужно удалить.

Теперь эта строка: (в PHP)

 $_REQUEST['type_agent'] 

должно быть:

 $_REQUEST['agent_type'] 

по: (в HTML-форме)

 <input type="radio" id="radio3" name="agent_type" value="Investor"> 

Тогда ваши заголовки были неправильными, где я добавил несколько \r\n

Один из ваших заголовков (в PHP)

 $headers .= "From: ".$from.""; 

был изменен на:

 $headers .= "From: $full_name <$email>\r\n"; 

Sidenote: его можно заменить на

 $headers .= "From: $fromemail <$email>\r\n"; 

если вы хотите, чтобы имя отображалось как «Новый агент» в почте, вместо имени человека, отправляющего электронную почту.


Использование этого $fromemail="New Agent"; в сочетании с $from=$fromemail; и $headers .= "From: ".$from."";

привел бы к отправке почты в СПАМ, поскольку это не фактический адрес электронной почты.

Кроме того, при тестировании исходного кода он не попадал в надлежащий HTML, но сами коды отображались в Email; это было исправлено.


Если вам нужна электронная почта и имя, вам нужно использовать две разные переменные.

То есть:

 $headers .= 'From: YourName <YourName@domain.com>' . "\r\n"; 

и в вашем случае:

 $headers .= "From: $full_name <$email>\r\n"; 

Перепишите: (PHP)

 <?php ob_start(); // commented out - is not needed for the time being // $fromemail="New Agent"; // change here if you want $toemail="email@example.com"; // change here if you want $sub="Agent Inquiries"; // change here if you want $success_page_name="thanks.html"; ////// do not change in following if($_SERVER['REQUEST_METHOD']=="POST") { $full_name=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['full_name'])); $email=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['email'])); $type_agent=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['agent_type'])); $contentmsg=stripslashes("<br><b><font style=color:#CC3300>$sub</font></b><br> <table width=708 border=0 cellpadding=2 cellspacing=1 bgcolor=#CCCCCC> <tr> <td width=165 align=right valign=top bgcolor=#FFFFFF><B>Full Name: </b> </td> <td width=565 align=left valign=top bgcolor=#FFFFFF>$full_name</td> </tr> <tr> <td width=165 align=right valign=top bgcolor=#FFFFFF><B>Email Address: </b> </td> <td width=565 align=left valign=top bgcolor=#FFFFFF>$email</td> </tr> <tr> <td width=165 align=right valign=top bgcolor=#FFFFFF><B>Type of Agent:</b> </td> <td width=565 align=left valign=top bgcolor=#FFFFFF>$type_agent</td> </tr> </table> "); $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n"; $headers .= "From: $full_name <$email>\r\n"; @mail($toemail,$sub,$contentmsg,$headers); header("Location:$success_page_name"); } ?> к <?php ob_start(); // commented out - is not needed for the time being // $fromemail="New Agent"; // change here if you want $toemail="email@example.com"; // change here if you want $sub="Agent Inquiries"; // change here if you want $success_page_name="thanks.html"; ////// do not change in following if($_SERVER['REQUEST_METHOD']=="POST") { $full_name=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['full_name'])); $email=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['email'])); $type_agent=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['agent_type'])); $contentmsg=stripslashes("<br><b><font style=color:#CC3300>$sub</font></b><br> <table width=708 border=0 cellpadding=2 cellspacing=1 bgcolor=#CCCCCC> <tr> <td width=165 align=right valign=top bgcolor=#FFFFFF><B>Full Name: </b> </td> <td width=565 align=left valign=top bgcolor=#FFFFFF>$full_name</td> </tr> <tr> <td width=165 align=right valign=top bgcolor=#FFFFFF><B>Email Address: </b> </td> <td width=565 align=left valign=top bgcolor=#FFFFFF>$email</td> </tr> <tr> <td width=165 align=right valign=top bgcolor=#FFFFFF><B>Type of Agent:</b> </td> <td width=565 align=left valign=top bgcolor=#FFFFFF>$type_agent</td> </tr> </table> "); $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n"; $headers .= "From: $full_name <$email>\r\n"; @mail($toemail,$sub,$contentmsg,$headers); header("Location:$success_page_name"); } ?> 

Примечания:

  1. Включение символа @ в @mail подавляет ошибки и не выполняет функцию, поэтому вы захотите удалить ее.

  2. В моем тестировании я удалил onSubmit="return CheckAll(this); так как ваш полный код не включал эту функцию. Если он не работает, вам также может понадобиться его удалить.

Удалите знак @ из команды @mail, и это может дать вам полезную ошибку. Знак @ там подавляет ошибки: http://www.php.net/manual/en/language.operators.errorcontrol.php

Вам нужно добавить символ EOL \n в заголовки для разделения. Не знаю, является ли это решением, но по крайней мере одна проблема требует внимания.

 $headers = "MIME-Version: 1.0\n"; $headers .= "Content-type: text/html; charset=iso-8859-1\n"; $from=$fromemail; $headers .= "From: ".$from."\n"; 

В дополнение к ответам / комментариям об устранении ошибок вы также можете убедиться, что mail() возвращает значение true указывающее, что ваш сервер принял его, и попытается выполнить доставку.

 $success = mail($toemail,$sub,$contentmsg,$headers); var_dump( $success ); // should be true