2010-11-19 25 views
1

S'il vous plaît aidez-moi, j'ai des problèmes avec l'envoi d'un message au format HTML en utilisant php mail() Je pense que le problème réside dans l'en-tête. J'ai inclus deux têtes avec une légère différence seulement entre guillemets simples ou doubles:en-tête de messagerie en php ne fonctionne pas

tête 1:

$headers = 'From: [email protected]\r\n Reply-To: [email protected]'; 
$headers .= '\r\nContent-Type: multipart/alternative; boundary="'.$random_hash.'"'; 

Lorsque j'utilise des guillemets simples comme ci-dessus, tout mon code html est imprimé dans le courrier comme texte simple sans th formatage html. Aussi mon en-tête est montré tout foiré avec tout après \r\n manquant.

tête 2:

$headers = "From: [email protected]\r\nReply-To: [email protected]"; 
$headers .= "\r\nContent-Type: multipart/alternative; boundary=\"".$random_hash."\""; 

En utilisant celui-ci, je reçois un en-tête parfait, mais maintenant mon courrier est envoyé vide avec une pièce jointe vide. Je ne sais pas d'où cela vient car je ne joins rien à mon courrier.

S'il vous plaît suggérer quoi faire

Répondre

5

Si vous utilisez des guillemets simples sur vos chaînes de PHP échapper à des personnages comme \ r \ n cessera de fonctionner.

Je ne sais pas comment vous aider avec votre pièce jointe sans plus de contexte.

4

Je n'aime pas le courrier php. Je recommande d'utiliser XpertMailer: http://www.xpertmailer.com/ faire un excellent travail.

+0

+1 belle bibliothèque, ne l'ai pas encore vu. Ça a l'air plutôt bien! –

3
  • Utilisez un library
  • Ne pas réinventer la roue si vous ne pouvez pas le faire tour. Utilisez un library!
+3

Je ne peux pas supporter la phrase * Ne pas réinventer la roue *, car elle suppose que la roue est intrinsèquement parfaite (et depuis quand l'un des cadres/bibliothèques est parfait) ... Mais vous êtes l'extension I pense pousse le bon point à la maison ... +1 – ircmaxell

0

C'est ce que j'ai utilisé avant de passer à phpmailer. Comme mentionné, utilisez une bibliothèque.

// Make email headers 
$separator = '--==Multipart_Boundary_'.md5(time()); 
$eol = PHP_EOL; 

$filepath = "filename.pdf"; 
// open pdf file 
$handle = fopen($filepath, "r"); 
// read pdf file 
$f_contents=fread($handle,filesize($filepath)); 
// encode read pdf file 
$attachment = chunk_split(base64_encode($f_contents)); 
// close pdf file 
fclose($handle); 
$message = "Text goes here"; 

// main header (multipart mandatory) 
$headers = "MIME-Version: 1.0".$eol; 
$headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol; 
$headers .= "Content-Transfer-Encoding: 7bit".$eol; 
$headers .= "X-Priority: 1 (Highest)".$eol; 
$headers .= "X-MSMail-Priority: High".$eol; 
$headers .= "Importance: High".$eol; 

// message 
$headers .= "--".$separator.$eol; 
$headers .= "Content-Type: text/plain; charset=utf-8".$eol; 
$headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol; 
$headers .= $message.$eol; 

// attachment 
$headers .= "--".$separator.$eol; 
$headers .= "Content-Type: application/pdf; name=".$filename.$eol; 
$headers .= "Content-Transfer-Encoding: base64".$eol; 
$headers .= "Content-Disposition: attachment; filename=".$filename.$eol.$eol; 
$headers .= $attachment.$eol.$eol; 
$headers .= "--".$separator."--"; 
0

Si vous n'êtes pas définir en fait deux versions (texte brut/HTML) avec des limites multipart alors vous devez modifier le type de contenu: multipart/alternative au bon type de contenu pour votre corps de messagerie.

En outre, les bibliothèques comme PHPMailer, et cetera sont généralement préférées à la fonction natif mail() de PHP, car elles offrent beaucoup plus de flexibilité sans vous obliger à construire manuellement des en-têtes complexes.

+0

PHPMailer l'a fait ... thnks – Anubhav