在CakePHP3电子邮件中嵌入图像

时间:2016-05-23 06:35:41

标签: php email cakephp-3.x

原始问题

我正在使用CakePHP 3的Mailer Aware特性发送电子邮件。

我的邮件正在使用此功能发送:

SELECT t.id,t.date,t.input,t.output,
       SUM(t.output+t.input) OVER(PARTITION BY t.ID ORDER BY t.date) as Total
FROM YourTable t

在我的电子邮件中,我有这个:

public function forgotPassword($user,$password)
{
    $this
        ->from(['no-reply@deltabec.com' => 'DeltaBEC Intraweb'])
        ->emailFormat('html')
        ->to([$user->email => $user->name . ' ' . $user->surname])
        ->subject('New Intraweb Password')
        ->template('Users' . DS . 'forgot_password', 'default')
        ->attachments([[
            'file' => WWW_ROOT . 'img' . DS . 'logo-dark.png',
            'mimetype' => 'image/png',
            'contentId' => 'company_logo'
        ]])
        ->viewVars(compact('user','password'));
}

但我的邮件是这样的:

enter image description here

我做错了什么?有没有理由不将图像嵌入电子邮件中?

编辑1 - 发现

所以我把电子邮件保存为html。这就是它告诉我的:

<?= $this->Html->image('cid:company_logo'); ?>

似乎它对链接进行编码并放置整个网址而不仅仅是<img id="_x0000_i1025" src="/cakesite/img/cid%3Acompany_logo">

编辑2 - 功能请求

我希望它能像我使用它一样工作。我的方式并没有根本错误,所以我在Github添加了一张票,因此可以进行讨论,并希望它能够被添加。

1 个答案:

答案 0 :(得分:1)

HTML帮助器image()方法(分别是URL帮助程序)不识别特殊cid方案,或者之后未使用//的任何其他方案:,因此会尝试创建图片资源网址。

这可能是针对增强请求的内容,或者甚至可能被视为错误,因此您可能需要打开机票over at GitHub

现在,只需使用帮助程序并手动创建<img>标记。