2010-08-30 120 views
0

我對PHP比較陌生。PDF附件顯示在Gmail中,但Outlook拒絕打開它

我寫了一個腳本,用於向用戶發送一封包含pdf附件的電子郵件,並向同事發送確認郵件。在基於web的電子郵件客戶端(如Gmail)中一切正常,但在Outlook中收到時,pdf附件無法打開。它還添加了另一個名爲「ATT0159.txt」的附件,該附件完全空白。

下面的代碼:

<?php 
$pdf = $_GET['pdf']; 
$product = $_GET['product']; 

$username = $_POST['Name']; #get name 
$useraddress = $_POST['Email']; #get user email address 

$subjectUser = $product . " PDF brochure from Specifile on-line"; 

$to = "[email protected]"; # recipient 
$subject = "Confirmation: PDF Request - " . $product; #subject 
$message = "The following person has requested the brochure - " . $product . "\n<br/>" . $username . " [ " . $useraddress . " ] "; #message 

$attachment = $_SERVER['DOCUMENT_ROOT'] . "\\" . $pdf; 
$attachment_type = "application/pdf"; 
$attachment_name = "brochure.pdf"; 

#open, read, then close the file 
$fp = fopen($attachment, 'rb'); 
$file = fread($fp, filesize($attachment)); 
fclose($fp); 

#create boundary string 
$num = md5(time()); 
$str = "==Multipart_Boundary_x{$num}x"; 

#encode data for safe transit 
$file = chunk_split(base64_encode($file)); 

#define user header 
$headers = "MIME-version: 1.0\r\n"; 
$headers .= "Content-type: multipart/mixed;\r\n"; 
$headers .= " boundary=\"{$str}\"\r\n"; 
$headers .= "From: Specifile on-line<[email protected]> \r\n"; 

#define confirmation header 
$Confirmheaders = "MIME-version: 1.0\r\n"; 
$Confirmheaders .= "Content-type: text/html;"; 
$Confirmheaders .= " charset=\"UTF-8\"\r\n"; 
$Confirmheaders .= "From: Specifile on-line<[email protected]> \r\n"; 

#create message for user 
$messageUser = "This is a multi-part message in MIME format\r\n"; 
$messageUser .= "--{$str}\r\n"; 
$messageUser .= "Content-type: text/html; charset=\"UTF-8\"\r\n"; 
$messageUser .= "Content-Transfer-Encoding: 8bit\r\n"; 
$messageUser .= "Hi " . $username . ", <p>The brochure you requested is attatched.</p> \r\n\n"; 
$messageUser .= "--{$str}\r\n"; 

#define non text attachment 
$messageUser .= "Content-Type: {$attachment_type}; "; 
$messageUser .= "name=\"{$attachment_name}\"\r\n"; 
$messageUser .= "Content-Disposition: attachment; "; 
$messageUser .= "filename=\"{$attachment_name}\"\r\n"; 
$messageUser .= "Content-Transfer-Encoding: base64\r\n"; 
$messageUser .= "$file\r\n\n"; 
$messageUser .= "--{$str}"; 

mail($useraddress,$subjectUser,$messageUser,$headers); 
mail($to,$subject,$message,$Confirmheaders); 

?> 

回答

0

不是一個真正的回答你的問題,但你有沒有考慮過使用現成的郵件類像SwiftMailer?它會爲您創建多部分郵件並添加附件。

+0

SwiftMailer工作出色!非常感謝! – 2010-08-30 12:27:45