Код электронной почты PHP не отправляет электронные письма в формате HTML

#php #html #email

#php #HTML #Адрес электронной почты

Вопрос:

Извините, кто-нибудь может помочь, пожалуйста?

У нас был некоторый PHP-код, который отправил по электронной почте человеку, спрашивающему о наших услугах на нашем веб-сайте. Электронное письмо, используемое для отправки стандартного ответа электронной почты на запрос, отформатированный в HTML. Но где-то в июне 2020 года, хотя мы не могли видеть, что были внесены какие-либо изменения, электронные письма начали отправляться без формата HTML и в основном показывать HTML-код.

Ниже приведена часть кода PHP, которая создает электронное письмо, но я не вижу в этом ничего плохого. Итак, если с приведенным ниже кодом нет проблем, что может привести к внезапному сбою кода и изменению ответных писем, которые работали в HTML, чтобы начать отправку в виде HTML-кода? (или что-то не так с кодом, который я не вижу?)

Любая помощь, указания или идеи будут очень признательны.

     $email_from = 'example@example.co.uk';//<== update the email address
        $email_subject = "Thank You for making enquiry";
        $email_body = '<!DOCTYPE html>
                <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">
                <link href="https://fonts.googleapis.com/css?family=Crimson Text" rel="stylesheet">
                <html>
                <head>
                    <title></title>
                </head>
                    <body>
                        EMAIL CONTENT WILL GO HERE!
                    </body>
                </html>';
    
        $to = $EnquiryEmailAddress;//<== update the email address
        // Always set content-type when sending HTML email
        $headers = 'MIME-Version: 1.0' . "rn";
        $headers .= 'Content-type:text/html;charset=ISO-8859-1' . "rn";
    
        $headers .= "From: $email_from rn";
        $headers .= "Reply-To: $email_from rn";
    
        mail($to,$email_subject,$email_body,$headers); 
  

Комментарии:

1. Что error вы получаете? error.log также проверьте файл

2. Вы не можете использовать обычный HTML в emails.en.m.wikipedia.org/wiki/HTML_email

3. Спасибо за информацию. Я не могу найти error.log. Электронное письмо все еще отправляется, и ошибка не появляется, оно только что потеряло все свое форматирование HTML (которое ранее работало) и отображалось, и теперь электронные письма отображают полный HTML-код как часть электронного письма.

Ответ №1:

Этот код зависит от правильной настройки исходящей электронной почты сервера. В PHP встроен почтовый процессор, называемый PHPMailer. Я рекомендую вам взглянуть на этот пакет, он вам очень поможет. Вы можете прочитать об этом здесь: https://github.com/PHPMailer/PHPMailer

Во-вторых, я рекомендую вам кодировать свои электронные письма в формате UTF-8 вместо использования ISO-8859-1 (если это возможно).

Кроме того, если ваш e запускает команду отправки почты во время отображения веб-страницы, команда отправки почты может занять некоторое время. Хорошим подходом является пакетное отправление электронной почты, когда пользователи не ожидают отображения веб-страницы. Это можно сделать, например, сохранив все исходящие электронные письма в таблице базы данных, и заставить пакетный процессор обрабатывать эту таблицу и отправлять электронные письма последовательно.

Наконец, как упоминалось в комментарии к вашему вопросу: помните, что HTML в электронных письмах очень ограничен, поэтому вы должны быть осторожны при создании HTML-кода электронной почты.

Удачи!

Комментарии:

1. Спасибо за вашу помощь. Я собираюсь заглянуть в PHPMailer. Нашел мини-учебник, поэтому попытаюсь разобраться с этим, чтобы посмотреть, смогу ли я заставить его работать. Просто немного странно, что код оставался неизменным в течение последнего года или около того, и в середине года просто перестал работать (просто пытаюсь все исправить с тех пор, как ушел наш последний разработчик). Думаю, вы правы, что что-то должно произойти в отношении нашего привязанного сервера, я поговорю с нашим ИТ-менеджером. Еще раз спасибо.