2011-05-14 52 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