1

Pear を使用して PDF が添付されたメールを送信しようとしています。メールは送信されますが、間違った形式で送信されているようです。メールがテキスト形式で表示されているようです。これは私が受け取るものです:

コンテントタイプ: マルチパート/オルタナティブ;

境界="=_5a78298c81e9b7e60dee1049b9239270"

--=_5a78298c81e9b7e60dee1049b9239270

Content-Transfer-Encoding: quoted-printable

コンテンツ タイプ: テキスト/プレーン。charset=ISO-8859-1

こんにちは世界

--=_5a78298c81e9b7e60dee1049b9239270

Content-Transfer-Encoding: quoted-printable

コンテンツ タイプ: テキスト/html; charset=ISO-8859-1

こんにちは世界

--=_5a78298c81e9b7e60dee1049b9239270--

コンテンツ転送エンコーディング: base64

コンテンツ タイプ: アプリケーション/オクテット ストリーム。

名前=phpk0AQHD

Content-Disposition: 添付;

ファイル名=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/");
}
?>

私が間違っていることについてのヒントは本当にありがたいです。

4

2 に答える 2

2

私はまったく同じ問題に何時間も費やしました.Gmailやその他のWebメールサービスへの電子メールは添付ファイル付きで問題なく配信されましたが、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);

これがトラブルの原因でした。ヘッダーから Content-Type を削除すると、試したすべてのメール リーダーで添付ファイルが正常に機能しました。コンテンツ タイプには「適切な」設定があると確信していますが、それがうまく機能していることに興奮したので、先に進んでやめました。

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

理想的なソリューションとはほど遠いですが、うまくいきました。今回の投資が他の誰かに役立つことを願っています:)

-D

于 2013-02-09T05:31:41.617 に答える
0

ティム

addAttachmentはmimeコンテンツタイプも取ります。やってみました

$message->addAttachment($tempLocation,'application/pdf');
于 2011-05-14T17:57:32.063 に答える