首页 文章

PHP Pear Mime Mail附件问题

提问于
浏览
1

我正在尝试使用Pear发送带有pdf附件的电子邮件 . 电子邮件发送,但似乎是以错误的格式发送 . 电子邮件似乎以文本格式显示 . 这是我收到的:

内容类型:multipart / alternative;

边界= “= _ 5a78298c81e9b7e60dee1049b9239270”

  • = _ 5a78298c81e9b7e60dee1049b9239270

Content-Transfer-Encoding:quoted-printable

内容类型:text / plain;字符集= ISO-8859-1

你好,世界

  • = _ 5a78298c81e9b7e60dee1049b9239270

Content-Transfer-Encoding:quoted-printable

内容类型:text / html;字符集= ISO-8859-1

Hello world

  • = _ 5a78298c81e9b7e60dee1049b9239270--

内容传输编码:base64

Content-Type:application / octet-stream;

名称= 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"=>"timottewellis@gmail.com", "Subject"=>"My Subject 7");
        $headers = $message->headers($extraheaders);

        $mail = Mail::factory("mail");
        $mail->send("timottewellis@gmail.com", $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/");
}
?>

关于我做错的任何提示都会非常感激 .

2 回答

  • 0

    我花了好几个小时处理完全相同的问题:电子邮件通过Gmail和其他网络邮件服务附件发送得很好,但在OUtlook或Outlook Web Access中,附件在消息正文中显得很乱 .

    对我来说,我发现问题出在发送到邮件项目的HEADERS数组中,甚至在添加附件之前 .

    我原来有这个:

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

    这造成了麻烦 . 一旦我从 Headers 中删除了Content-Type,附件在我尝试的所有邮件阅读器中都能正常工作 . 我确定内容类型有一个“正确”的设置,但我很高兴它完全适合我,所以我继续前进并将其关闭 .

    $headers = array ('MIME-Version' => '1.0',
    'From' => 'ask@'.$siteurl,
    'To' => $emailTo,
    'Subject' => $subject);
    

    远非理想的解决方案,但它的工作原理 . 希望这次投资可以帮助别人:)

    -D

  • 1

    蒂姆

    addAttachment也采用mime内容类型 . 你有没有尝试过

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

相关问题