2011-05-14 104 views
1

我正嘗試使用Pear發送帶有pdf附件的電子郵件。電子郵件發送,但它似乎以錯誤的格式發送。它顯示電子郵件以文本格式顯示。這是我收到的內容:帶附件問題的PHP Pear Mime郵件

Content-Type:multipart/alternative;

邊界= 「= _ 5a78298c81e9b7e60dee1049b9239270」

- = _ 5a78298c81e9b7e60dee1049b9239270

內容傳輸編碼:引用可打印

的Content-Type:text/plain的;字符集= ISO-8859-1

世界,你好

- = _ 5a78298c81e9b7e60dee1049b9239270

內容傳輸編碼:引用可打印

的Content-Type:text/html的;字符集= ISO-8859-1

世界,你好

- = _ 5a78298c81e9b7e60dee1049b9239270--

內容傳輸編碼:的base64

內容類型:應用程序/八位字節流;

名稱= phpk0AQHD

內容處置:附件;

文件名= phpk0AQHD

這之後的隨機字符,我只能假設的巨量是文本格式的附加文件。我試着將它發送到Gmail,Hotmail和使用Outlook的Microsoft Exchange地址,我也得到了相同的結果。

這是我的代碼:

<?php 

include('../includes/Mail.php'); 
include('../includes/Mail/mime.php'); 

$newsletterName = $_POST['newsletterName']; 
$newsletterDate = $_POST['newsletterDate']; 

$_SESSION['newsletterName'] = $newsletterName; 
$_SESSION['newsletterDate'] = $newsletterDate; 

$uploadDir = "newsletters/"; 
$tempLocation = $_FILES['newsletter']['tmp_name']; 
$newsletterPath = $uploadDir . str_replace(" ", "-", $_FILES['newsletter']['name']); 
$newsletterFile = $_FILES['newsletter']; 

if ($_FILES["newsletter"]["type"] == "application/pdf") 
{ 
    include '../includes/db-connection-wp.php'; 
    $query = "INSERT INTO newsletters (newsletter_title, newsletter_path, newsletter_date) VALUES ('" . mysql_real_escape_string($newsletterName) . "', '" . mysql_real_escape_string($newsletterPath) . "', '$newsletterDate')"; 
    if (!mysql_query($query,$connection)) 
    { 
     die('Error: ' . mysql_error() . ' Please go back and try again.'); 
    } 

    //copy pdf to the right location 
    if (copy($tempLocation, "../" . $newsletterPath)) 
    { 
     include '../includes/db-connection.php'; 

     $queryContact = "SELECT users.email_address FROM form_pages LEFT JOIN users ON form_pages.user_id = users.user_id WHERE form_pages.page_name = 'add-newsletter'"; 
     $resultContact = mysql_query($queryContact); 

     while ($rowContact = mysql_fetch_assoc($resultContact)) 
     { 
      $from = $rowContact["email_address"]; 
     } 

     $query = "SELECT * FROM newsletter_recipients"; 
     $result = mysql_query($query); 

     $subject = 'Newsletter'; 

     $message = new Mail_mime(); 
     $text = file_get_contents("mail_text.txt"); 
     $html = file_get_contents("mail_html.html"); 

     $message->setTXTBody("Hello world"); 
     $message->setHTMLBody("<b>Hello world</b>"); 
     $message->addAttachment($tempLocation); 
     $body = $message->get(); 
     $extraheaders = array("From"=>"[email protected]", "Subject"=>"My Subject 7"); 
     $headers = $message->headers($extraheaders); 

     $mail = Mail::factory("mail"); 
     $mail->send("[email protected]", $headers, $body); 

     $_SESSION['pdf'] = true; 
     $_SESSION['newsletterName'] = null; 
     $_SESSION['newsletterDate'] = null; 
     header("location:success/"); 
    } 
    else 
    { 
     $_SESSION['upload'] = false; 
     header("location:add-newsletter/"); 
    } 
} 
else 
{ 
    $_SESSION['pdf'] = false; 
    echo "hello " . $_FILES["newsletter"]["type"]; 
    header("location:add-newsletter/"); 
} 
?> 

在我做錯了任何提示將非常感激。

回答

0

Tim

addAttachment也採用MIME內容類型。你試過

$message->addAttachment($tempLocation,'application/pdf'); 
+0

剛剛試過,但沒有改變。看起來好像整個電​​子郵件都是作爲內容類型文本發送的。 – Tim 2011-05-14 19:14:45

+0

Tim嘗試使用$ newsletterPath添加文件的完整路徑 – Leo 2011-05-14 21:45:42

1

我已經花了幾個小時就完全一樣的問題:電子郵件傳送的精細與附件Gmail和outher網絡郵件服務,但在Outlook或Outlook Web Access,附件中排在爲亂碼消息的正文。

對我來說,我發現問題出在發送到郵件項目的HEADERS數組中,甚至在添加附件之前。

我本來這樣的:

$headers = array ('MIME-Version' => '1.0', 
'Content-type' => 'text/html; charset=iso-8859-1', 
'From' => '[email protected]'.$siteurl, 
'To' => $emailTo, 
'Subject' => $subject); 

這引起了麻煩。一旦我從頭文件中刪除了Content-Type,附件在我試過的所有郵件閱讀器中都能正常工作。我確信內容類型有一個「正確」的設置,但我很激動,它爲我工作,所以我繼續前進,離開它。

$headers = array ('MIME-Version' => '1.0', 
'From' => '[email protected]'.$siteurl, 
'To' => $emailTo, 
'Subject' => $subject); 

遠非理想的解決方案,但它的工作。希望這次投資可以幫助別人:)

-D