Не отправлять по электронной почте
Я пытаюсь создать простую форму электронной почты для клиента и не могу получить <textarea>
для отправки в виде сообщения. Я перепробовал все, что нашел до сих пор, и ничего не работает должным образом...
Вот мой код:
<h4>Email Al</h4>
<table>
<form name="contactForm" id="contact" action="send_form_email.php" method="post">
<tr>
<td>
<label>Name:</label>
<input type="text" name="name">
</td>
<td>
<label>Email Address:</label>
<input type="email" name="email">
</td>
</tr>
<tr>
<td colspan="2">
<label>Website (if Available):</label>
<input type="text" name="website">
</td>
</tr>
<tr>
<td colspan="2">
<label>Your Message:</label></br>
<textarea for="" name="information" width="100%" rows="10" form="contactForm"></textarea>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Send Message">
</td>
</tr>
</form>
</table>
Это форма в index.php файл, ниже приведено электронное письмо send-email.php
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$website = $_POST['website'];
$message = $_POST['information'];
$email_from = '[email protected]';
$email_subject = $name . " has sent you a message!";
$email_body = "You have received a new message from " . $name . " via your website!\n".
"Name:\n $name\n".
"Email:\n $email\n".
"Website:\n $website\n".
"Message:\n $message\n".
$to = "[email protected]";
$headers = "From: $email_from \r\n";
$headers .= "Reply-To: $visitor_email \r\n";
mail($to,$email_subject,$email_body,$headers);
function IsInjected($str)
{
$injections = array('(\n+)',
'(\r+)',
'(\t+)',
'(%0A+)',
'(%0D+)',
'(%08+)',
'(%09+)'
);
$inject = join('|', $injections);
$inject = "/$inject/i";
if(preg_match($inject,$str))
{
return true;
}
else
{
return false;
}
}
if(IsInjected($visitor_email))
{
echo "Bad email value!";
exit;
}
?>
<?php
header("Location: /formsubmitted.php"); /* Redirect browser */
exit();
?>
Если у кого-нибудь есть хоть малейшее представление о том, почему это работает неправильно, я бы тоже хотел знать! Это одна из первых php-функций для сообщений/электронной почты, которые я создал сам, как обычно разрабатываю для wordpress, поэтому обычно я просто устанавливаю плагин для своего клиента.
2 answers
Это из-за этой строки: ( Обратитесь к моей сноске)
"Message:\n $message\n".
У вас есть точка вместо (закрывающей) точки с запятой ;
Редактировать: Вам нужно удалить form="contactForm"
из <textarea>
. После тестирования он не отображался в почте при использовании с ним.
И отчеты об ошибках рассказали бы вам об этом.
Существо:
Уведомление: Неопределенный индекс: информация (строка 8)
И
Примечание: Неопределенная переменная: visitor_email (строки 26 и 55)
В обоих:
$headers .= "Reply-To: $visitor_email \r\n";
И
if(IsInjected($visitor_email))
$visitor_email
не определено в вашем коде. Вы должны были использовать $email
вместо этого для всех экземпляров $visitor_email
.
Тогда у вас есть for=""
, который, по-видимому, не является допустимым синтаксисом в вашем <textarea...
Это for=""
неоднозначно.
Ссылка: https://developer.mozilla.org/en/docs/Web/HTML/Element/textarea
Вы также должны проверить наличие пустых полей с условным !empty()
.
Сноска:
После более интенсивного тестирования и в отношении точки, о которой я упоминал выше, я должен заявить следующее:
Как ни странно, PHP рассматривает его как допустимый синтаксис, так как в нем есть точка с запятой и включено в конце здесь $to = "[email protected]";
Что это будет делать, так это по-прежнему отправлять почту, НО также включите это в электронное письмо, которое явно не включено в тело переменной $email_body
.
Таким образом, первая часть моего ответа была в определенной степени правильной, form="contactForm"
будучи здесь главным виновником.
- Возможно, вы хотели использовать идентификатор
id="contactForm"
или классclass="contactForm"
. Оба они действительны для использования и будут включены в вашу почту.
Однако вы не сможете использовать name="contactForm"
, так как ваш <form>
содержит этот именованный атрибут.
- Оба атрибута
name
иid
(должны быть) уникальными.
Удалить form="contactForm"
из <textarea>
. Я убрал его. И это начало работать.
Заменить
<textarea for="" name="information" width="100%" rows="10" form="contactForm"></textarea>
До
<textarea for="" name="information" width="100%" rows="10"></textarea>
Или,
Согласно HTML5, вы можете использовать, form
id's
в input
. Итак, вместо form="contactForm"
используйте form="contact"
.
Изменение
<textarea for="" name="information" width="100%" rows="10" form="contactForm"></textarea>
До
<textarea for="" name="information" width="100%" rows="10" form="contact"></textarea>
Для получения дополнительной информации проверьте атрибуты текстовой области