Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP:无法仅以纯文本形式发送电子邮件_Php_Email_Cakephp_Cakephp 2.0_Html Email - Fatal编程技术网

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

CakePHP:无法仅以纯文本形式发送电子邮件,php,email,cakephp,cakephp-2.0,html-email,Php,Email,Cakephp,Cakephp 2.0,Html Email,CakePHP2.+ 我正在循环浏览一个用户列表,并用以下方法向每个用户发送一封电子邮件。电子邮件都已发送,但格式似乎是text+html,即使我指定只需要纯文本(emailFormat('text))。我并不特别介意包含html,但它会搞砸格式,而且大多数邮件客户端似乎选择默认显示的(丑陋的)html版本。具体来说,带有“PS:”的最后一行被附加到 public function send_blast_to_user( $blast, $blastUser) { $body = $b

CakePHP2.+

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

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;
}
生成的电子邮件如下所示:

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

看来我们解决了

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

链接页面的摘录: 如果您发送的是纯文本电子邮件,您可能已经注意到,在某些情况下,您的电子邮件会转换为HTML。这通常发生在启用了一个或多个过滤器时,这些过滤器需要发送的邮件的HTML版本

为什么会发生这种情况

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

单击跟踪 开放跟踪 电子邮件模板 掘墓人 如何控制结果转换(请参阅下面的更新)

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

更新:

现在,您可以全局禁用纯文本到HTML的转换,也可以仅用于单击跟踪

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

供参考:
这可能是一个漫长的过程,但这可能是一个难题吗

即使您没有指定
$Email->emailFormat('text'),它是否同时发送HTML和文本/纯文本?@russellc是。“两者”似乎都是默认值,我试图覆盖它的操作无效。您的电子邮件配置“smtp”中有什么特殊的内容吗?它被指定为
CakeEmail
对象构造函数的参数。@russellc我认为我的任何配置设置都不会影响这一点,但为了以防万一,我将它添加到了上面的问题中。这可能是一个远大目标,但这可能是一个难题吗?
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',
);