Почтовое сообщение PHP неправильно отображается в GMail и Outlook - PullRequest
0 голосов
/ 28 июня 2019

Когда я пытаюсь отправить сообщение электронной почты в формате HTML с помощью библиотеки PHPMailer, полученное письмо отображается неправильно.

Я уже пробовал использовать разные почтовые клиенты (Gmail и Outlook), но они выглядят очень одинаково.

Это мой текущий код

require_once 'includes/mail-denied.php'; // Here is specified the $message variable, containing the HTML and CSS (https://i.imgur.com/UG1B34V.png)

$keys = array('{{ server_name }}', '{{ player_name }}', '{{ reason_area }}', '{{ date }}');
$_POST['description'] = nl2br($_POST['description']);
$replace = array($servernam, $name, $_POST['description'], date("Y"));

$message = str_replace($keys, $replace, $message);

$mail_manager = new PHPMailer(true);
try {
    $mail_manager->SMTPDebug = 2;

    $mail_manager->setFrom('noreply@'.$_SERVER['HTTP_HOST'], $servernam);
    $mail_manager->addAddress($mail);
    $mail_manager->addReplyTo('noreply@'.$_SERVER['HTTP_HOST'], 'Do not reply');

    $mail_manager->isHTML(true);
    $mail_manager->Subject = "Staff Application System - ".$servernam;
    $mail_manager->Body    = $message;
    $mail_manager->AltBody = 'Your application has been declined.';

    $mail_manager->send();
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail_manager->ErrorInfo}";

Я получаю электронное письмо, но часть HTML выглядит просто испорченной.

Вот код HTML:

<?php
$message = '
<div style="width: 500px;
    height: 110px;
    position: fixed;
    background-color: #ff9999;
    border-bottom: 1px solid #ff8080;
    display: block;
    border-top-left-radius: .5em;
    border-top-right-radius: .5em;
    color: #FFF;
    text-align: center;
    font-family: \'Product Sans\', Arial, sans-serif;">
    <h2>Staff System Application</h2>
    <h3>{{ server_name }}</h3>
</div>

<div style="width: 500px;
    height: 600px;
    background-color: #f2f2f2;
    display: block;
    padding-top: -10px;
    z-index: 999;
    border-radius: .5em;
    font-family: \'Product Sans\', Arial, sans-serif;">
    <div style="padding: 120px 15px 5px 15px;
        color: #797979;
        font-family: \'Product Sans\', Arial, sans-serif;">
        <p>Dear {{ player_name }}...</p>

        <p>After carefully considering your staff application the head staff have acquired a verdict.</p>

        <p>We regret to inform you that your application has been:</p>

        <p style="color: #C60000; font-size: 80px; text-align: center; margin-top: 10px;">DENIED</p>

        <div style="margin-top: -55px; font-size: 15px;">
            <p>You have been denied for the next reason(s):</p>
            {{ reason_area }}
        </div>
        <br>
        <br>
        <p style="text-align: center; padding-bottom: -15px;">THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.</p>
    </div>
</div>

<div style="margin-top: -10px;
    width: 500px;
    height: 90px;
    position: fixed;
    display: block;
    background-color: #595959;
    border-bottom-left-radius: .5em;
    border-bottom-right-radius: .5em;
    text-align: center;
    font-family: \'Product Sans\', Arial, sans-serif;
    color: #edeff2;">
    <p style="font-size: 20px;">&copy; {{ server_name }} - {{ date }}</p>
    <p style="font-size: 9px;">&copy; {{ date }} Carinae Studios. All rights reserved.</p>
</div>';
?>

Вот как это должно выглядеть: Should look like

И вот как это выглядит, когда я получаю электронное письмо: What it looks like

Я довольно новичок в HTMLвнутри электронных писем я понятия не имею, как это можно исправить.

Ответы [ 2 ]

1 голос
/ 16 июля 2019

Вот несколько предложений о том, что я получил из вашей информации:
Как я уже говорил в комментариях, используйте как можно больше таблиц.

Избегайте занятий и используйте встроенные стили.Добавьте стиль шрифта к вашим td's , а также к любому html-элементу внутри вашего td.Используйте тег font или span вместо тега p .

Пример:

<td style="font-family:Arial; font-size:18px;">
    <font style="font-family:Arial; font-size: 18px">Text here</font>
</td>

Don '• Используйте отступы, поля и поплавки, используйте высоты и отступы для создания промежутков.Вы даже можете использовать прозрачные изображения для создания интервалов:

<tr>
    <td width="10" style="10px"></td> <!-- vertical spacing to create left/right margins -->
    <td><img src="full-image.jpg" alt="your visible image here"></td>
    <td width="10" style="10px"></td> <!-- vertical spacing to create left/right margins -->
</tr>
<!-- horizontal spacing to create top/bottom margins START -->
<tr height="50" style="height:50px;">
    <td height="50" width="10" style="height: 50; width: 10px"></td>
    <td height="50"><img height="50" style="height: 50px;" src="transparent.png" alt="this is a transparent image"></td>
    <td height="50" width="10" style="height: 50; width: 10px"></td>
</tr>
<!-- horizontal spacing to create top/bottom margins END -->
<tr>
    <td width="10" style="10px"></td> <!-- vertical spacing to create left/right margins -->
    <td><img src="full-image.jpg" alt="your visible image here"></td>
    <td width="10" style="10px"></td> <!-- vertical spacing to create left/right margins -->
</tr>

Другие советы:

  • Избегайте использования css border-radius, используйте изображения вместо
  • Используйте шрифты websafe, используйте google, чтобы найти, какие из них websafe
  • Ссылка на изображения с помощью CDN

Litmus содержит бесплатные шаблоны, которые вы можете использовать дляИсходя из своего кода, они гарантированно будут работать на любом клиенте / устройстве.

Надеюсь, это поможет.Дайте мне знать, если у вас остались вопросы.

0 голосов
/ 28 июня 2019

Имейте в виду, Outlook использует Word для рендеринга электронных писем. Подробнее о поддерживаемых и неподдерживаемых элементах HTML, атрибутах и ​​свойствах каскадных таблиц стилей можно прочитать в следующих статьях:

...