4

Zend フレームワークは Zend_Mail オブジェクトを変更したため、HTML 電子メールを作成するための setBodyHtml() メソッドがなくなりました。

ZF2 Mail コンポーネントを使用して HTML 電子メールを作成する方法を知っている人はいますか? これまでのところ、私は試しました:

$html = new \Zend\Mime\Part($htmlText);
$html->type = \Zend\Mime\Mime::TYPE_HTML;
$html->disposition = \Zend\Mime\Mime::DISPOSITION_INLINE;
$html->encoding = \Zend\Mime\Mime::ENCODING_QUOTEDPRINTABLE;
$html->charset = 'iso-8859-1';

$body = new \Zend\Mime\Message();
$body->addPart($html);

$message = new \Zend\Mail\Message();
$message->setBody($body);
$message->addTo('myemail@com.com', 'User1');
$message->addFrom('myemail@com.com', 'User2');
$message->setSubject('Test');

結果の電子メールは次のとおりです。

MIME バージョン: 1.0

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

Content-Transfer-Encoding: quoted-printable

Content-Disposition: インライン

差出人: XYZ

前月のログ ファイルのレポート=0A=09=09=09=0A=09=

=>09=09=0A=09=09=09テスト=0A =09=09=09=0A=09=09=09

l>

4

4 に答える 4

9

\Zend\Mail\Header コンポーネントに問題があることがわかりました。

Linux ベースのマシンを使用して PHP マシンをホストしています。これは、メールの各ヘッダー行に「\r」のみを追加する必要があることを意味します。Windows の場合は「\r\n」です。

\Zend\Mail\Header ファイルの定数 EOL は "\r\n" に設定されているため、Linux マシンから送信された場合、すべてのヘッダーが電子メールに表示されます。

ここでのベスト プラクティスは、プラットフォームを自動的に検出し、正しい行末コードを使用する PHP_EOL 定数を使用することです。

これを修正するには:

\Zend\Mail\Header EOL 定数を更新して PHP_EOL に等しくする必要があります。また、UTF-8 を使用している場合は、それがメッセージで最後に呼び出されることを確認する必要があります。本体をセットした後に行う必要があります。

ZF2 2.0チームにチケットを入れて見ました

これは実用的な例です:

    $html = '' //my html string here

    $m = new \Zend\Mail\Message();
    $m->addFrom('joe@me.com', 'Joe Schmo')
      ->addTo('ally@me.com', 'Ally Joe')
      ->setSubject('Test');

    $bodyPart = new \Zend\Mime\Message();

    $bodyMessage = new \Zend\Mime\Part($html);
    $bodyMessage->type = 'text/html';

    $bodyPart->setParts(array($bodyMessage));

    $m->setBody($bodyPart);
    $m->setEncoding('UTF-8');

             //send your message now
于 2012-10-17T19:08:14.950 に答える
3
use Zend\Mail;
use Zend\Mime\Message as MimeMessage;
use Zend\Mime\Part as MimePart;

    $body = 'email body';
    $htmlPart = new MimePart($body);
    $htmlPart->type = "text/html";

    $textPart = new MimePart($body);
    $textPart->type = "text/plain";

    $body = new MimeMessage();
    $body->setParts(array($textPart, $htmlPart));

    $message = new Mail\Message();
    $message->setFrom($from);
    $message->addTo($to);
    $message->addReplyTo($reply);
    if ($cc)
        $message->addCc($cc);
    if ($bcc)
        $message->addBcc($bcc);
    $message->setSender($sender);
    $message->setSubject($subject);
    $message->setEncoding("UTF-8");
    $message->setBody($body);
    $message->getHeaders()->get('content-type')->setType('multipart/alternative');

    $transport = new Mail\Transport\Sendmail();
    $transport->send($message);

これがあなたを助けることを願っています

于 2013-05-13T11:17:00.127 に答える
0

次の投稿を参照してください: https://stackoverflow.com/a/34267509/5448467

WasabiMail は、HTML メール テンプレートを便利な方法で処理できるメール モジュールです。

于 2015-12-14T13:19:07.920 に答える
0

このブログを読むことをお勧めします。

基本的に、setBodyHtml()あなただけが持っているものはもうありませんsetBody()。これは、最新の電子メール リーダーの仕組みによるものです。すべての読者には、両方を表示するオプションがあります。現在、ほとんどの電子メールは HTML で送信されます。ただし、HTML 部分はそれぞれのプログラムによって単純に「翻訳」されるため、HTML 電子メールをプレーンテキストとして表示することもできます。

ZF2 では、HTML 電子メールとプレーンテキスト電子メールをサポートするには、両方の MIME タイプを追加するだけです。また、PlainText が必要な場合は、電子メール プログラムがこれを処理します。少なくとも、これは私がZF2と言及されたブログで現在のものを理解する方法です.

于 2012-10-17T07:48:21.387 に答える