2016-03-01 1 views
0

J'envoie un email automatisé depuis mon serveur web, et ça marche bien ... sauf que l'email que je reçois (dans Microsoft Outlook) a un fichier texte vide (ATT00001.txt) s'affiche. Je n'essaie PAS de joindre quoi que ce soit à mon courrier électronique sortant. Toutes mes recherches montrent comment attacher ... et je veux le contraire ... comment ne pas attacher quoi que ce soit! Qu'est-ce que je fais mal? Merci!php mail() fonctionne, mais une pièce jointe vide apparait

$uid = md5(uniqid(time())); 
     $eol = PHP_EOL; 

     $header = "From: Website Admin <".$MessageFrom.">".$eol; 
     $header .= "Reply-To: ".$MessageFrom.$eol; 

     //now add (optional) CC and BCC 
     if($CcMessageTo!=''){ $header .= "Cc: $CcMessageTo".$eol; } 
     if($BccMessageTo!=''){ $header .= "Bcc: $BccMessageTo".$eol; } 

     //the next line is to request a read reciept 
     if($RequestReadReceipt=='yes'){ $header .= "Disposition-Notification-To: ".$MessageFrom.$eol; } 

     $header .= "MIME-Version: 1.0".$eol; 
     $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\""; 

     $message = "--".$uid.$eol; 
     $message .= "Content-Type: text/html; charset=ISO-8859-1".$eol; 
     $message .= "Content-Transfer-Encoding: 8bit".$eol; 
     $message .= $MessageBody.$eol; 
     $message .= "--".$uid.$eol; 

     //add an additional parameter to help not get blocked as spam 
     $AdditionalParameters = "-f$MessageFrom"; 

     mail($MessageTo, $MessageSubject, $message, $header, $AdditionalParameters); 

La seule chose utile que j'ai trouvé est que, apparemment ExchangeServer n'aime pas voir une pièce jointe avant le texte (bien que je ne pensais pas que j'envoyais une pièce jointe). Voici le lien que j'ai trouvé: http://kb.mit.edu/confluence/pages/viewpage.action?pageId=4981187

+0

Je pense que le multipart/mix – Mistergreen

Répondre

0

Il s'avère que le problème était avec Content-Type: multipart/mixed en haut de l'en-tête. Cela indiquait apparemment au client de courrier électronique de s'attendre à plus que juste le contenu d'email ... et ainsi il remplissait un certain remplissage pour la pièce jointe manquant. Dès que je l'ai changé que de

Content-Type: multipart/mixed

à

Content-Type: text/html

tout a commencé à travailler. Bien sûr, j'ai aussi fait un tas de modifications en cours de route, y compris la possibilité d'ajouter une pièce jointe PDF si j'en ai besoin (juste pour le dépannage) - alors voici ce que j'ai fini après tout a été modifié. Espérons que cela aidera quelqu'un un jour.

if($Attachment) 
{ 
    $filename = $AttachmentName; 
    $file = $_SERVER['DOCUMENT_ROOT'].$AttachmentSrc; 
    $file_size = filesize($file); 
    if($file_size > 0) 
    { 
     $handle = fopen($file, "r"); 
     $filecontent = fread($handle, $file_size); 
     fclose($handle); 
     $attachment = chunk_split(base64_encode($filecontent)); 
     $IncludeAttachment = 'yes'; 
    } 
} 

$uid = md5(uniqid(time())); 

$header = "From: ".$MessageFromName." <".$MessageFromEmail.">".$eol; 
$header .= "Reply-To: ".$MessageFromEmail.$eol; 
if($CcMessageTo!=''){ $header .= "Cc: $CcMessageTo".$eol; } 
if($BccMessageTo!=''){ $header .= "Bcc: $BccMessageTo".$eol; } 
if($RequestReadReceipt=='yes'){ $header .= "Disposition-Notification-To: ".$MessageFromEmail.$eol; } 
$header .= "MIME-Version: 1.0".$eol; 
if($IncludeAttachment == 'yes') 
{ 
    $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\""; 
    $message = "--".$uid.$eol; 
    $message .= "Content-Type: text/html; charset=UTF-8".$eol; 
    $message .= "Content-Transfer-Encoding: quoted-printable".$eol.$eol; 
    $message .= quoted_printable_encode($MessageBody).$eol; 
    $message .= "--".$uid.$eol; 
    $message .= "Content-Type: application/pdf; name=\"".$filename."\"".$eol; 
    $message .= "Content-Transfer-Encoding: base64".$eol; 
    $message .= "Content-Disposition: attachment; filename=\"".$filename."\"".$eol.$eol; 
    $message .= $attachment.$eol; 
    $message .= "--".$uid."--"; 
} 
else 
{ 
    $header .= "Content-Type: text/html; charset=UTF-8".$eol; 
    $header .= "Content-Transfer-Encoding: quoted-printable".$eol.$eol; 
    $message .= quoted_printable_encode($MessageBody).$eol; 
} 

$AdditionalParameters = "-f$MessageFromEmail"; 

mail($MessageTo, $MessageSubject, $message, $header, $AdditionalParameters);