Форматирование текста не отображается в электронных письмах, отформатированных с помощью TinyMCE и отправленных с помощью SwiftMailer.

Я использую SwiftMailer в своих сценариях PHP для отправки электронных писем, а также TinyMCE в качестве текстового редактора для написания и форматирования тела сообщения. Проблема в том, что когда я отправляю сообщение, оно появляется без какого-либо форматирования во всех почтовых клиентах (gmail, yahoo и hotmail), и даже ссылки не отображаются как ссылки, они отображаются как обычный текст, но синим цветом. Так в чем проблема?

Вот код, который я использую для отправки писем:

<?php

require_once 'path/to/SwiftMailer/lib/swift_required.php';

$transport = Swift_MailTransport::newInstance();
# Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);
# Create the message
$msg = Swift_Message::newInstance();
# Give the message a subject
$msg->setSubject($_POST['subject']);
# Set the From address with an associative array
$msg->setFrom(array($_POST['sender_email'] => $_POST['sender_name']));
# Give it a body
$msg->setBody($_POST['message'], 'text/html');

$failedRecipients = array();
$numSent = 0;
$to = array(
    '[email protected]',
    '[email protected]' => 'Recipient 2',
    '[email protected]',
    '[email protected]' => 'Recipient 4',
    '[email protected]'
);

foreach ($to as $address => $name) {
    if (is_int($address)) {
        $msg->setTo($name);
    } else {
        $msg->setTo(array($address => $name));
    }

    $numSent += $mailer->send($msg, $failedRecipients);
}

echo $numSent > 0 ? 'SUCCESS' : 'FAILURE';

?>

обратите внимание, что $_POST['message'] содержит тело сообщения, которое я написал и отформатировал с помощью TinyMCE.


person Amr    schedule 10.09.2012    source источник


Ответы (3)


Я пробовал много вещей, пока не понял, проблема заключалась в том, что специальные символы в теле отформатированного сообщения экранировались (перед каждым специальным символом добавлялась обратная косая черта). Я не знаю, почему, и я не знаю не знаю, кто из них (TinyMCE или SwiftMailer) это сделал. Так что все, что мне нужно было сделать, это удалить косые черты из тела сообщения перед отправкой сообщения через SwiftMailer. Мне просто нужно было изменить эту строку:

$msg->setBody($_POST['message'], 'text/html');

to be:

$msg->setBody(stripslashes($_POST['message']), 'text/html');
person Amr    schedule 12.09.2012

Раньше Swiftmailer не использовался, но в качестве отправной точки он выглядит так, как будто он удаляет (не экранирует) HTML-теги из содержимого перед отправкой. Можете ли вы опубликовать свой код, поскольку это может быть что-то, что вы там делаете, или что-то, что делает сам Swift mailer.

Беглый взгляд на swiftmailer, и похоже, что он поддерживает html-сообщения, так что может быть и так, что вы используете неправильный тип MIME.

person Tom Howell    schedule 10.09.2012
comment
Я разместил код, который использую для отправки своих сообщений, и SwiftMailer не удаляет HTML-теги перед отправкой. - person Amr; 11.09.2012

Я предполагаю, что проблема в том, что ваше электронное письмо в формате html не содержит таблицы стилей, доступной в вашем редакторе tinymce. Убедитесь, что та же самая таблица стилей применяется к содержимому вашей электронной почты.

person Thariama    schedule 10.09.2012