2010-03-17 55 views
2

下面的$ header是通过PHP的mail($to,$subject,$content,$header)命令发送的。邮件到达,似乎有一个附件。但是邮件文本和文件一样是空的。我认为这与行间距有关,但我看不出问题所在。我试图把内容(在边界之间)放在$contents而不是附加到$header。它没有什么区别。有什么想法吗?此邮件标题文本有什么问题?

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结束时不换行

回答

1

我使用下面的代码来发送消息带有附件以及html和文本的消息部分。我记得很久以后才与之对抗,但不幸的是我不记得哪些部分是我的问题。也许看着它会帮助你。我已经改变了一些不相关的变量,并希望更容易阅读。随意问问是否有些奇怪或不清楚,我会尽力解释。

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

根据您的示例,我将行结束符从\ r \ n更改为\ n。这解决了它。 TX! – dnagirl 2010-03-17 16:30:28

+0

行结束将是我的建议,但我迟到了:)正确的格式是\ r \ n,但根据我的经验,有一些电子邮件服务器程序,试图自己修复它,并最终打破信息。 – 2010-03-17 17:17:30

0

这些事情发生在从零开始构建MIME邮件时。有几个php模块可以用来生成酷兼容的mime消息。 Mail_Mime应该做的伎俩。