2009-07-21 2 views
3

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

http://premailer.dialect.ca/

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

ответ

6

Вам нужно добавить заголовок, в котором говорится, что содержимое является 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 <[email protected]>, Kelly <[email protected]>' . "\r\n"; 
$headers .= 'From: Birthday Reminder <[email protected]>' . "\r\n"; 
$headers .= 'Cc: [email protected]' . "\r\n"; 
$headers .= 'Bcc: [email protected]' . "\r\n"; 

// Mail it 
mail($to, $subject, $message, $headers); 
+3

К сожалению, отправка HTML-сообщений электронной почты без каких-либо альтернатив воспринимается многими спам-фильтрами как спам. Чтобы снизить вероятность запуска, вы должны отправить его как многочастный, с одним разделом как text/plain, а другой как text/html. – staticsan

2

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

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

Вот код:

// Setup recipients 
$to = '[email protected]' . ',' // comma separates multiple addresses 
$to .= '[email protected]'; 

// 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 <[email protected]>, Kelly <[email protected]>' . "\r\n"; 
$headers .= 'From: Birthday Reminder <[email protected]>' . "\r\n"; 
$headers .= 'Cc: [email protected]' . "\r\n"; 
$headers .= 'Bcc: [email protected]' . "\r\n"; 

// Send the email 
mail($to, $subject, $message, $headers); 
+1

почему в разных $ заголовках, чем в $? должны быть одинаковыми, не так ли? –

3

самый простой способ, чтобы написать HTML-страницу со встроенным CSS и протолкнуть automated styling machine

+0

Это решение для меня! спасибо – Luca

7

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

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

В вашей папке «Виды» вы можете настроить маршруты для разных форматов электронной почты (я тоже использую 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 имеет множество других полезных вещей, включая возвращение «недоставленных» адресов, протоколирование ошибок доставки и дросселирование больших пакетов электронной почты. Я бы посоветовал вам проверить это.