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',
);
答案 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