У меня есть этот файл обработки формы PHP, который работает, но с 2 проблемами, которые я не могу решить

#php #contact-form

#php #контактная форма

Вопрос:

У меня есть этот файл обработки формы PHP, который работает, но с 2 проблемами, которые я не могу решить:

  1. Не отправляет электронное письмо, если оно отправлено с мобильного устройства
  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, например, верно?