2009-07-21 8 views
3

La plupart des clients de messagerie ont des problèmes pour lire les messages CSS dans les e-mails HTML (y compris Gmail et Hotmail). J'utilise souvent ce service pour convertir mon HTML/CSS au format d'email approprié afin que tout semble normal à la fin de l'utilisateur. Fondamentalement, ce qu'il fait est de convertir tous les CSS inline styles:Comment envoyer des emails HTML/CSS?

http://premailer.dialect.ca/

Effectuez l'une d'entre vous ont d'autres méthodes pour envoyer des CSS dans vos e-mails HTML? Je génère automatiquement les e-mails, et en raison de certaines restrictions, je ne peux pas modifier les styles en ligne.

Répondre

6

Vous devez ajouter un en-tête indiquant que le contenu est HTML. Lorsque vous utilisez la fonction mail(), l'un des en-têtes doit être: Type de contenu: html/text (Cela peut ne pas être l'en-tête 'exact').

Permettez-moi de vous trouver un exemple: (A partir de la php.net/mail la page)

// 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

Malheureusement, l'envoi de courrier électronique HTML sans alternative est perçu par de nombreux filtres anti-spam comme du spam. Pour réduire les chances de déclencher cela, vous devriez l'envoyer en plusieurs parties, avec une section comme texte/plain et l'autre comme texte/html. – staticsan

2

Pour ajouter à l'exemple ci-dessus, avez (dans le cas où vous ne savez pas très bien PHP), il vous suffit de construire la "email" en utilisant les variables: to, sujet, message, et en-têtes

Faites-moi savoir si vous voulez savoir comment créer un formulaire pour remplir et exécuter ce script PHP, sinon, vous pouvez simplement entrer tout ce qui se trouve dans ce fichier manuellement, enregistrez-le en tant que fichier PHP, lancez-le sur un serveur qui prend en charge PHP et accédez au fichier dans votre navigateur.

Voici le code:

// 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

pourquoi est différent dans $ headers que dans $ to? devrait être le même, non? –

3

le plus simple est d'écrire une page html avec css intégré et le pousser à travers automated styling machine

+0

C'est la solution pour moi! Je vous remercie – Luca

7

En ce qui concerne format direct, je l'ai toujours fait CSS en ligne le style, cependant j'utilise SwiftMailer (http://swiftmailer.org/) pour PHP5 pour gérer les fonctionnalités de messagerie et cela m'a énormément aidé.

Vous pouvez envoyer des messages en plusieurs parties avec des formats différents. Ainsi, si le client de messagerie n'aime pas la version HTML, vous pouvez toujours utiliser la version texte par défaut.

Dans votre dossier "views", vous pouvez définir des routes différentes pour les différents formats de courrier électronique (j'utilise également smarty, d'où l'extension .tpl). Voici ce qu'est une fonction SwiftMailer typique :: sendTemplate() ressemblerait quand vous configurez les modèles:

$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'); 
    } 
} 

Vous avez l'idée. SwiftMailer a un tas d'autres bonnes choses, y compris le retour des adresses "non distribuables", la consignation des erreurs de livraison, et la limitation des gros lots de courrier électronique. Je vous suggère de vérifier.

Questions connexes