我已经为邮件模板创建了页面并为预览模板设置了按钮。
我已经从本地机器设置了图像路径,例如,
src="/projectname/app/webroot/img/logo.JPG"
当我预览该模板时,它会显示徽标。
当我发送邮件时使用该模板时,电子邮件中不显示图像。
那么任何人都可以告诉我可能是什么问题,或者我错过了类似 mime 类型的东西吗?
谢谢,
这行不通。电子邮件是在客户端中打开的,“/projectname/app/webroot/img/logo.JPG”之类的路径对该客户端意味着什么?什么是域?
您可以将域添加到 SRC,例如 src="http://example.com/projectname/app/webroot/img/logo.JPG"。但默认情况下不会显示,因为这是一个安全风险。想象一下垃圾邮件发送者在每封电子邮件中包含 src="http://example.com/feedback?id=12345" 之类的图像,其中 ID 用于标识邮件发送到的每个电子邮件地址。每个下载此图像的客户都将确认收到此电子邮件,让垃圾邮件发送者知道您正在阅读他们的垃圾邮件。大多数电子邮件客户端都会明确询问您是否应该下载邮件中提到的图像。
另一种解决方案是将每封电子邮件作为电子邮件的附件包含在内,然后您可以将其称为“内联”图像。这不需要外部连接并且安全风险较小,客户端默认情况下大多允许这样做。
我已经用谷歌搜索了一个据称也支持内联的组件,但您也可能会找到其他组件:http: //bakery.cakephp.org/articles/CraZyLeGs/2006/12/18/swiftmailer-component-tutorial
在电子邮件中,您必须使用完整路径,而不是相对路径。要在 CakePHP 中轻松做到这一点,请使用:FULL_BASE_URL
常量,HTML Helper
如下所示:
<?php
echo $this->Html->image(
FULL_BASE_URL . $photo['Photo']['path'].$photo['Photo']['filename']
);
?>
(显然这可以在一行中完成,但为了便于在 StackOverflow 上阅读,我将其分解)
电子邮件客户端需要图像的绝对路径;使用 HTML 助手附加完整的基础:
<?= $this->Html->image("logo.JPG", array('fullBase' => true)) ?>
请注意,/projectname/app/webroot/img/
使用 HTML 帮助程序时不需要。
这可能是因为当您在本地机器上测试时,该路径很好。但是,如果您向自己发送电子邮件(例如 gmail),您的浏览器可能会在某处http://mail.google.com/gmail/projectname/app/webroot/img/logo.JPG
寻找图像,但不会在那里找到您的图像。因此,您需要将图像源设置为http://localhost/projectname/app/webroot/img/logo.JPG
.
如果您使用的是 CakePHP v1.2 或 1.3(是的,它们已被弃用 - 但嘿,有人可能会觉得这很有用),您需要将 Content-ID 标头添加到要附加到电子邮件的图像中,以便您可以通过以下方式引用它在消息中内联使用 cid 时。打开 cake 安装的 email 控制器,在 __attachFiles() 方法中添加这一行:
$this->__message[] = 'Content-ID: <' 。基本名称($文件)。'>';
然后,您可以像这样在模板中添加图像:
v1.2 和 1.3 中 email 类的 attachfile 方法只接受路径,没有更高版本的附加功能,因此“hack”