3

私の Web アプリケーションは、Zend_Pdf を使用して PDF ドキュメントを作成し、Zend_Mail を使用して送信します。また、ユーザーがアップロードしたドキュメント (PDF も含む) を添付します。添付ファイルは、Apple Mail を除く、一般的に使用されるすべてのメール プログラムに表示されます。作成された PDF は約 30 KB で、メッセージは外部のメール サーバーを使用して送信されます。

Apple Mail では、メッセージ リストにペーパー クリップが付いたメッセージ (添付ファイルがあることを示します) が表示されますが、メッセージを開いたときに添付ファイルが表示されません。メッセージ ヘッドの [詳細] をクリックすると、添付ファイルとそれらを保存するオプションが表示されます。

これは、電子メールを送信する (簡略化された) コードです。

<?php
    $mail = new Zend_Mail('utf-8');
    $mail->setFrom('niels@example.com', 'Niels')
         ->setSubject('Subject')
         ->addTo('niels@example.com', 'Niels')
         ->setBodyHtml('Hi there', 'utf-8', Zend_Mime::ENCODING_8BIT);

    $a = new Zend_Mime_Part($pdfContent);
    $a->type = 'application/pdf';
    $a->filename = 'my_pdf.pdf';
    $a->disposition = Zend_Mime::DISPOSITION_ATTACHMENT;
    $a->encoding = Zend_Mime::ENCODING_BASE64;
    $mail->addAttachment($a);

    $mail->setHeaderEncoding(Zend_Mime::ENCODING_BASE64);
    $mail->send();

受信したメールには、メッセージの次のヘッダーがあります

Content-Type: multipart/mixed; boundary="=_f6a669390c6713f60a851af814fe897f"
Content-Disposition: inline
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0

HTML メールの内容:

--=_f6a669390c6713f60a851af814fe897f
Content-Type: text/html; charset="utf-8"
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

添付内容:

--=_f6a669390c6713f60a851af814fe897f
Content-Type: application/pdf
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="my_pdf.pdf"

添付ファイルが Apple Mail のメッセージに表示される方法はありますか? 現在、「添付ファイルはありません」と答える人もいます。Apple は、添付ファイルを非表示/表示するために「賢い」ことをしていますか? または、別の Content-Disposition などを使用する必要がありますか? 解決策を見つけるためにかなりの時間を検索しましたが、手がかりが不足しています。

4

2 に答える 2

1

これは Zend の問題ではなく、Apple Mail の問題です。Thunderbird をインストールしてください ;-)

いくつかのヒントを次に示します。

  • インライン ファイルと添付ファイルを同時に送信すると、このような問題が発生する可能性があります。
  • メール アプリの設定は、デフォルトでインライン添付ファイルに設定されています

    1. メールを閉じる
    2. ターミナルを開く
    3. コマンドを入力してくださいdefaults write com.apple.mail DisableInlineAttachmentViewing -bool yes,
    4. メールを開いて、もう一度やり直してください
  • 本文の設定でエンコーディングを明示的に指定しないでください。メールはデフォルトの「UTF-8」エンコーディングで初期化されます。

  • ローマ字ベースの文字セットを使用しない言語でメールを送信する場合を除き、ヘッダーをエンコードしないでください

ファイルをインラインで添付してみてください

$mail = new Zend_Mail('utf-8');
$mail->setFrom('niels@example.com', 'Niels')
         ->setSubject('Subject')
         ->addTo('niels@example.com', 'Niels')
         ->setBodyHtml('Hi there');

// add attachment
$mail->createAttachment(file_get_contents('my_pdf.pdf'), 'application/pdf', Zend_Mime::DISPOSITION_ATTACHMENT , Zend_Mime::ENCODING_BASE64); 

// try sending attachment inline... maybe this will work (not sure if supported by all mail clients)
// $mail->createAttachment(file_get_contents('my_pdf.pdf'), 'application/pdf', Zend_Mime::DISPOSITION_INLINE , Zend_Mime::ENCODING_BASE64); 

$mail->send();
于 2013-01-10T15:00:46.390 に答える
0

アレックスが提供した答えは確かに解決策でした。それApple Mail の問題です。添付ファイルのサイズが大きくなると、電子メールに表示されます。例: より大きな PDF ドキュメント (79 KB、メッセージ リストでは 112 KB と表示される) を送信したところ、それが表示されます。同じ種類の (しかし小さい) PDF を送信すると、非表示になります。

于 2013-01-15T19:00:48.233 に答える