Как отправлять электронные письма в формате HTML / CSS? - PullRequest
4 голосов
/ 21 июля 2009

Большинство почтовых клиентов испытывают проблемы с чтением CSS в электронных письмах HTML (включая Gmail и Hotmail). Я часто использую этот сервис для преобразования моего HTML / CSS в правильный формат электронной почты, чтобы на стороне пользователя все выглядело нормально. По сути, он конвертирует все CSS во встроенные стили:

http://premailer.dialect.ca/

Есть ли у кого-нибудь из вас другие способы отправки CSS в ваших электронных письмах в формате HTML? Я автоматически генерирую электронные письма, и из-за некоторых ограничений я не могу изменить встроенные стили.

Ответы [ 4 ]

7 голосов
/ 22 июля 2009

Что касается прямого формата, я всегда делал встроенные CSS-стили, однако я использую SwiftMailer (http://swiftmailer.org/) для PHP5 для обработки функций электронной почты, и это очень помогло.

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

В папке «views» вы можете установить отдельные маршруты для разных форматов электронной почты (я тоже использую smarty, отсюда расширение .tpl). Вот как будет выглядеть типичная функция SwiftMailer :: sendTemplate () при настройке шаблонов:

 $email_templates = array('text/html' => 'email/html/' . $template . '.en.html.tpl',
                        'text/plain' => 'email/text/' . $template . '.en.txt.tpl');

foreach ($email_templates as $type => $file) {
  if ($email->template_exists($file)) {
    $message->attach(new Swift_Message_Part($email->fetch($file), $type));
  } elseif ($type == 'text/plain') {
    throw new Exception('Could not send email -- no text version was found');
  }
}

Вы поняли идею. SwiftMailer имеет множество других полезных вещей, включая возврат «недоставленных» адресов, ведение журнала ошибок доставки и регулирование больших пакетов электронной почты. Я бы посоветовал вам проверить это.

6 голосов
/ 21 июля 2009

Вам необходимо добавить заголовок, в котором говорится, что содержимое является HTML. Когда вы используете функцию mail (), один из заголовков должен быть: Тип содержимого: html / text (это может быть не «точный» заголовок).

Позвольте мне найти вам пример: (Со страницы php.net / mail )

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

// Mail it
mail($to, $subject, $message, $headers);
3 голосов
/ 22 июля 2009

Самый простой способ - написать html-страницу со встроенным css и протолкнуть ее через автоматизированный стайлинг

2 голосов
/ 21 июля 2009

Чтобы добавить в приведенный выше пример (в случае, если вы не очень хорошо знаете PHP), вам просто нужно создать «электронное письмо», используя переменные: to, subject, message и headers

Дайте мне знать, если вы хотите знать, как создать форму для заполнения и запуска этого скрипта PHP, в противном случае вы можете просто ввести все в этот файл вручную, сохранить как файл PHP, выбросить его на сервер, который поддерживает PHP и перейдите к файлу в вашем браузере.

Вот код:

// Setup recipients
$to = 'johndoe@google.com' . ',' // comma separates multiple addresses
$to .= 'janedoe@msn.com';

// subject
$subject = 'PHP Email Script - Test Email';

// message (to use single quotes in the 'message' variable, supercede them with a back slash like this-->&nbsp; \'
$message = '
<html>
<head>
  <title>PHP Email Script</title>
</head>
<body>
  <p style="background: #ccc; width: 100%;">Test Email Script</p>
</body>
</html>
';


// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

// Send the email
mail($to, $subject, $message, $headers);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...