Я не понимаю, почему я не получаю электронную почту из формы после заполнения простой формы. После нажатия кнопки «Отправить» она перенаправляется на страницу благодарности без проблем, но не по электронной почте.
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.
(Протестировано). У вас было несколько проблем с вашим кодом.
@
символ в @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 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"); } ?>
Примечания:
Включение символа @
в @mail
подавляет ошибки и не выполняет функцию, поэтому вы захотите удалить ее.
В моем тестировании я удалил 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