2010-03-17 14 views
2

L'en-tête $ suivant est envoyé via la commande mail($to,$subject,$content,$header) de PHP. Le courrier arrive et semble avoir une pièce jointe. Mais le texte du mail est vide comme le fichier. Je pense que cela a quelque chose à voir avec l'espacement des lignes, mais je ne vois pas le problème. J'ai essayé de mettre le contenu (entre les limites) dans $contents plutôt que de l'ajouter à $header. Cela ne fait pas de différence. Des pensées?Quel est le problème avec ce texte d'en-tête de courrier?

From: [email protected] 
Reply-To: [email protected] 
X-Mailer: PHP 5.3.1 
MIME-Version: 1.0 
Content-Type: multipart/mixed; 
    boundary="7425195ade9d89bc7492cf520bf9f33a" 

--7425195ade9d89bc7492cf520bf9f33a 
Content-type:text/plain; charset=iso-8859-1 
Content-Transfer-Encoding: 7bit 

this is a test message. 

--7425195ade9d89bc7492cf520bf9f33a 
Content-Type: application/pdf; name="test.pdf" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment; filename="test.pdf" 

JVBERi0xLjMKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFIvRmlsdGVyIC9GbGF0ZURlY29k 
ZT4+CnN0cmVhbQp4nE2PT0vEMBDFadVdO4p/v8AcUyFjMmma5CqIIF5cctt6WnFBqLD1+4Np1nY3 
c3lvfm+GyQ4VaUY11iQ2PTyuHG5/Ibdx9fIvhi3swJMZX24c602PTzENegwUbNAO4xcoCsG5xuWE 
. 
... the rest of the file 
. 
MDAwMDA2MDYgMDAwMDAgbiAKMDAwMDAwMDcwNyAwMDAwMCBuIAowMDAwMDAxMDY4IDAwMDAwIG4g 
CjAwMDAwMDA2NDcgMDAwMDAgbiAKMDAwMDAwMDY3NyAwMDAwMCBuIAowMDAwMDAxMjg2IDAwMDAw 
IG4gCjAwMDAwMDA5MzIgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSAxNCAvUm9vdCAxIDAgUiAv 
SW5mbyAyIDAgUgovSUQgWzxEMURDN0E2OUUzN0QzNjI1MDUyMEFFMjU0MTMxNTQwQz48RDFEQzdB 
NjlFMzdEMzYyNTA1MjBBRTI1NDEzMTU0MEM+XQo+PgpzdGFydHhyZWYKNDY5MwolJUVPRgo= 


--7425195ade9d89bc7492cf520bf9f33a-- 

$header se termine sans saut de ligne

Répondre

1

J'utilise le code ci-dessous pour envoyer un message avec une pièce jointe ainsi que des pièces messages HTML et texte. Je me souviens d'avoir longtemps lutté pour le faire correctement, mais je ne me souviens malheureusement pas quelles parties étaient mes problèmes. Peut-être que le regarder vous aidera. J'ai changé certaines variables non pertinentes et j'espère que cela sera plus facile à lire. N'hésitez pas à demander si quelque chose est bizarre ou pas clair et je vais essayer d'expliquer.

public function sendEmail($htmlString) 
{ 
    $random_hash = md5(date('r', time())); 

    $message = "--mixed-$random_hash\n"; 
    $message .= 'Content-Type: multipart/alternative; boundary="alt-' . $random_hash . '"' . "\n\n"; 
    $message .= 'MIME-Version: 1.0' . "\n"; 
    $message .= '--alt-' . $random_hash . "\n"; 
    $message .= 'Content-Type: text/plain; charset="iso-8859-1"' . "\n"; 
    $message .= 'Content-Transfer-Encoding: 7bit' . "\n\n"; 

    // text message 
    $message .= strip_tags($htmlString) . "\n\n"; 

    $message .= '--alt-' . $random_hash . "\n"; 
    $message .= 'Content-Type: text/html; charset="iso-8859-1"' . "\n"; 
    $message .= 'Content-Transfer-Encoding: 7bit' . "\n\n"; 

    // html message 
    $message .= $htmlString . "\n\n"; 

    $message .= '--alt-' . $random_hash . '--' . "\n"; 

    // graph image 
    if($this->selectedGraph != 0) 
    { 
     $graphString = $this->getGraph(); // image attachment 
     $graphString = chunk_split(base64_encode($graphString)); 

     $linkID = 'graph-' . $userInfo['FirmID'] . $random_hash . '-image'; 

     $message .= '--mixed-' . $random_hash . "\n"; 
     $message .= 'MIME-Version: 1.0' . "\n"; 
     $message .= 'Content-Transfer-Encoding: base64' . "\n"; 
     $message .= 'Content-ID: ' . $linkID . "\n"; 
     $message .= 'Content-Type: image/gif; name="graph.gif"' . "\n"; 
     $message .= 'Content-Disposition: attachment' . "\n\n"; 

     $message .= $graphString; 
     $message .= '--mixed-' . $random_hash . '--' . "\n"; 

    } 
    else 
    { 
     $message .= '--mixed-' . $random_hash . '--' . "\n"; 
    } 


    $headers = 'From: ' . $this->from. "\r\nReply-To: " . $this->replyto; 
    $headers .= "\r\nContent-Type: multipart/related; boundary=\"mixed-" . $random_hash . "\"\r\nMIME-Version: 1.0"; 

    $flags = '-f ' . BOUNCED_EMAIL_ADDRESS; 

    return mail($userInfo['Email'], $this->subject, $message, $headers, $flags); 

} 
+0

J'ai changé mes fins de ligne de \ r \ n à \ n en fonction de votre exemple. Cela l'a réparé. Tx! – dnagirl

+0

Les fins de ligne allaient être ma suggestion mais j'étais en retard :) Le bon format est \ r \ n mais dans mon expérience il y a quelques programmes de serveur de messagerie là-bas qui essayent de réparer eux-mêmes et finalement casser des messages. –

0

Ces choses se produisent lors de la construction de mails mime à partir de zéro. Il existe quelques modules PHP que vous pouvez utiliser pour générer des messages MIME sympas et compatibles. Mail_Mime devrait faire l'affaire.