0

これがケーキのコードです.....$email_body

<?php
$this->Email->reset();
$this->Email->delivery = 'smtp';
$this->Email->smtpOptions = array(
    'port'=>'465', 
    'timeout'=>'30',
    'host' => 'ssl://smtp.gmail.com',
    'username'=>'noreply@example.com',
    'password'=>'a_password_you_cant_see',
);
$this->Email->sendAs = 'html';
$this->Email->template = 'default';
$this->Email->from = '"NO-REPLY" <noreply@example.com>';
$this->Email->to = "rakib@example.com";
$this->Email->subject = "test PHP html email";
$email_body = "Hello message body
                <hr />
                This is rakib
                <br />
                <table width=\"100%\" bgcolor=\"#ff0\">
                    <tr>
                        <td>
                            In a table
                        </td>
                    </tr>
                </table>";
$this->Email->send($email_body);
?>

Show Originalこのメールを送信した後、 [メールの右上隅にある] GMail のドロップダウン メニューからボタンを使用して元のメールの内容を表示すると、HTML は次のようになります。

<!-- Starting to render - email/html/default -->
<p> Hello message body</p>
<p>                         <hr /></p>
<p>                         This is rakib</p>
<p>                         <br /></p>
<p>                         <table width="100%" bgcolor="#ff0"></p>
<p>                             <tr></p>
<p>                                 <td></p>
<p>                                     In a table</p>
<p>                                 </td></p>
<p>                             </tr></p>
<p>                         </table></p>
<p> </p>
<!-- Finished - email/html/default -->

<p>タグはすべての新しい行に含まれて</p>いました.....それはなぜですか? CakePHP 1.3 の使用

4

3 に答える 3

2

メールで何かをするときは、MVC の原則に従うようにしてください。電子メールの HTML (ビュー) をコントローラーである可能性が高いものに記述すると、少し面倒になり、コードが肥大化する傾向があります (コントローラーでマークアップを作成するなど)。

テンプレートを使用してメールの構造を作成し、ビュー変数 ( $this->set(...)) を使用して特定の値を適用します (ドキュメントを参照してください)。

タグが挿入される理由はわかりませんが、リターン キーを押すたびに暗黙的に挿入される<p>改行文字と関係があると思われます。\n

要約すると、マークアップをテンプレートに移動すると、すべてが改善されます。

于 2013-04-20T19:05:23.457 に答える
1

私はこれに対する解決策を見つけました...私default.ctpは自分のアプリフォルダに自分のファイルを作成app/views/elements/email/html/default.ctpし、ファイルに以下を入れる必要がありました

<?php
echo $content;

それは私の問題を解決しました。この問題の分析については、以下をご覧ください。

app/views/elements/email/text/default.ctp[PSメールが正しく印刷されるように、テキスト ベースのメールについても同じことを行いました]


問題は、自分の app フォルダーで要素を宣言しなかったためdefault.ctp、cake が にある独自のコア lib フォルダーのビュー要素にフォールバックしていたことcake/libs/view/elements/email/html/default.ctpです。あそこ、これはそれがすることです。

<?php
$content = explode("\n", $content);
foreach ($content as $line):
    echo '<p> ' . $line . "</p>\n";
endforeach;
?>

これが、<p>新しい行ごとにタグが付けられた場所です。@thaJeztah の回答に感謝します。これが起こらないようにするために、コアの lib フォルダーの要素default.ctpを最終的にオーバーライドする独自の要素を app フォルダーに作成する必要がありました。default.ctp

これは悪いシナリオの 1 つです。

于 2013-04-20T23:33:50.260 に答える