CakePHP:无法以纯文本形式发送电子邮件

时间:2013-11-21 14:05:40

标签: php email cakephp cakephp-2.0 html-email

CakePHP 2。+ ...

我正在循环浏览用户列表,并使用以下方法向每封用户发送电子邮件。电子邮件都已发送,但即使我指定只需要纯文本(emailFormat('text)),格式似乎也是text + html。我不会特别介意包含的html,但它搞砸了格式化,大多数邮件客户端似乎选择默认显示的(丑陋的)HTML版本。具体来说,带有“PS:”的最后一行被包含在<pre>标签中,因此字体会发生变化。 Urgh。

public function send_blast_to_user( $blast, $blastUser) {

    $body = $blast['Blast']['body'];
    $body = str_replace('%%FIRST_NAME%%', $blastUser['first_name'], $body);
    $body = str_replace('%%LAST_NAME%%', $blastUser['last_name'], $body);

    $body .= '

    PS: You can stop receiving these emails any time by changing your settigns: http://example.com/';

    $Email = new CakeEmail('smtp');
    $Email->from( $blast['Blast']['from'] );
    $Email->emailFormat('text');
    $Email->to( $blastUser['email'] );
    $Email->subject( $blast['Blast']['subject'] );
    $sent = $Email->send( $body );
    $Email->reset();
    if ($sent) {
        $blastUser['BlastsUser']['sent']++;
        $this->BlastsUser->save($blastUser['BlastsUser']);
        return true;
    }
    return false;
}

生成的电子邮件如下所示:

------------=_1385042226-22231-136
Content-Type: text/plain; charset=UTF-8
content-transfer-encoding: quoted-printable

Dear Emerson,=0D
=0D
You are perfect for the following job.=0D
=0D
From,=0D
Brett=0D
=0D
        PS: You can stop receiving these emails any time by changing your j=
ob alert settings: http://example.com/ bla=0D
=0D
=0D
=0D


------------=_1385042226-22231-136
Content-Type: text/html; charset="UTF-8"
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

<html><body>
<p>Dear Emerson,</p>
<p>You are perfect for the following job.</p>
<p>From, Brett</p>
<pre>PS: You can stop receiving these emails any time by changing your job =
alert settigns: http://example.com/bla/ </pre>
</body></html>=

------------=_1385042226-22231-136--

这是我在/Config/email.php

中的电子邮件配置
public $smtp = array(
    'transport' => 'Smtp',
    'host' => 'smtp.sendgrid.net',
    'port' => 587,
    'timeout' => 30,
    'username' => 'myusername',
    'password' => 'mypassword',
    'client' => null,
    'log' => false,
    'tls' => true
    //'charset' => 'utf-8',
    //'headerCharset' => 'utf-8',
);

1 个答案:

答案 0 :(得分:2)

看起来我们想出来了!

问题是由于SendGrid在您使用其服务时将电子邮件转换为HTML。

链接页面的摘录:

如果您要发送纯文本电子邮件,您可能已经注意到,在某些情况下,您的电子邮件会转换为HTML。当您启用了一个或多个需要您正在发送的消息的HTML版本的过滤器时,通常会发生这种情况。

为什么会这样?

以下过滤器将纯文本电子邮件转换为HTML,以便可以在电子邮件中插入正确的HTML标记:

点击跟踪 开放跟踪 电邮模板 的Gravatar 如何控制生成的转换(请参阅下面的更新)

您可以关闭导致从纯文本转换为HTML的过滤器。 如果您使用空格开始每一行,这将在该行周围添加“预格式化”标记。 您可以使用双换行分隔新句子,这将在句子周围添加“段落”

标签。 您可以将邮件转换为HTML,从而绕过我们完全转换它的需要

更新:

您现在可以全局禁用纯文本到HTML转换,或仅用于点击跟踪。

要全局禁用转化,请访问帐户 - >全局设置,然后选中“不要将纯文本电子邮件转换为HTML”复选框(请参阅示例) 要仅为点击跟踪禁用转化,请访问过滤器,然后点击点击跟踪的设置链接。确保未选中“在纯文本电子邮件中启用点击跟踪”复选框(参见示例)

供参考:

可能是一个长镜头,但这可能是一块拼图吗? http://support.sendgrid.com/hc/en-us/articles/200181418-Plain-text-emails-converted-to-HTML