#php #contact-form
#php #контактная форма
Вопрос:
У меня есть этот файл обработки формы PHP, который работает, но с 2 проблемами, которые я не могу решить:
- Не отправляет электронное письмо, если оно отправлено с мобильного устройства
- При получении электронного письма в Gmail появляется желтое предупреждающее сообщение, потому что Google не может проверить, было ли отправлено электронное письмо с реального электронного письма
Пожалуйста, кто-нибудь может это проверить?
<?php
if(isset($_POST['invio-form']))
{
$nome = $_POST['nome'];
$azienda = $_POST['azienda'];
$telefono = $_POST['telefono'];
$email = $_POST['email'];
$messaggio = $_POST['messaggio'];
$acconsento = $_POST['acconsento'];
if (!ctype_alpha(str_replace(array(' ', "'", '-'), '', $nome))) {
header('location:/?errore-nome');
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
header('location:/?errore-email');
}
else {
$to = "myemail@email.com";
$subject = 'Landing page - Ci ha contattato un nuovo LEAD';
$headers = "From: $nome - $email rn";
$headers .= "Reply-To: $email rn";
$headers .= "MIME-Version: 1.0rn";
$headers .= "Content-Type: text/html; charset=ISO-8859-1rn";
$message = "<html><body>";
$message .= "<h1>Riepilogo dati utente: rn</h1>";
$message .= "<hr>rn";
$message .= "<p style='font-size: 18px;'>Email ricevuta da: <strong>$email</strong> rn</p>";
$message .= "<p style='font-size: 18px;'>Nome utente: $nome rn</p>";
$message .= "<p style='font-size: 18px;'>Azienda: $azienda rn</p>";
$message .= "<p style='font-size: 18px;'>Numero di telefono: $telefono rn</p>";
$message .= "<p style='font-size: 18px;'>Utente ha scritto: $messaggio</p>";
$message .= "<hr>rn";
$message .= "<p style='font-size: 18px;'>Utente ha aderito al trattamento dei dati personali rn</p>";
$message .= "</html></body>";
if(mail($to, $subject, $message, $headers)) {
header('location:/?grazie');
}
}
}
?>
Комментарии:
1. Я советую вам использовать PHPMailer, изучите, как отправить электронное письмо с помощью PHPMailer с composer, это может спасти вашу жизнь!
2. Если бы я искал адрес from, я бы, скорее всего, нашел другой сервер, отличный от того, с которого вы отправляете. Мой совет — не подделывать адрес from (используйте действительный адрес сервера). У вас есть электронное письмо с заголовком ответа. Внимание: вы открыты для ввода заголовка электронной почты.
Ответ №1:
У вас неверный заголовок «From:». Адрес электронной почты должен быть в формате $nome <$email>rn
. Смотрите RFC2822. В некоторых случаях $nome должен быть в кавычках. И «From:» email должен быть тем же хостом, что и отправитель, то есть — ваш.
if(preg_match('/["(),.:;<>@[\\]]/', $nome))
{
$nome = '"'.addcslashes($nome, '"(),.:;<>@[]').'"';
}
$address = sprintf('%s <%s>', $nome, $email);
Комментарии:
1. Да, вы были правы! Я не могу получить электронное письмо, если оно отправлено с другого хоста… Есть ли способ решить это?
2. Боюсь, что нет, это «защита» от спама.
3. так что нужно использовать некоторые сервисы, такие как postmark, например, верно?