我已经为邮件模板创建了页面,并为预览模板设置了按钮。
我已经从我的本地机器设置了图像路径,例如
src="/projectname/app/webroot/img/logo.JPG"
当我预览该模板时,它会显示徽标。
当我发送邮件图像时使用该模板时,电子邮件中不会显示。
所以有人可以告诉我可能是什么问题,或者我错过了像mime类型的东西吗?
谢谢,
答案 0 :(得分:2)
这不起作用。电子邮件是在客户端打开的,黑客会像“/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
答案 1 :(得分:1)
在电子邮件中,您必须使用完整路径,而不是相对路径。要在CakePHP中轻松完成此操作,请使用FULL_BASE_URL
常量和HTML Helper
,如下所示:
<?php
echo $this->Html->image(
FULL_BASE_URL . $photo['Photo']['path'].$photo['Photo']['filename']
);
?>
(显然这可以在一行中完成,但为了便于在StackOverflow上阅读而将其分解)
答案 2 :(得分:0)
这可能是因为当您在本地计算机上进行测试时,该路径很好。但是,如果您向自己发送电子邮件(比如gmail),您的浏览器可能会在http://mail.google.com/gmail/projectname/app/webroot/img/logo.JPG
之类的地方查找图像,但在那里找不到您的图像。
因此,您需要将图片来源设置为http://localhost/projectname/app/webroot/img/logo.JPG
。
答案 3 :(得分:0)
电子邮件客户端需要图像的绝对路径;使用HTML帮助程序附加完整的基础:
<?= $this->Html->image("logo.JPG", array('fullBase' => true)) ?>
请注意,使用HTML帮助程序时不需要/projectname/app/webroot/img/
。
答案 4 :(得分:0)
如果您正在使用CakePHP v1.2或1.3(是的,他们已被弃用 - 但有人可能会觉得这很有用)您需要在图像中添加Content-ID标题以附加到电子邮件中,以便您可以参考在消息中内联使用它时通过cid来实现它。打开蛋糕安装的电子邮件控制器,并在__attachFiles()方法中添加此行:
$ this-&gt; __ message [] =&#39; Content-ID:&lt;&#39; 。 basename($ file)。 &#39;&GT;&#39 ;;
然后,您可以在模板中添加图像,如下所示:
v1.2中的电子邮件类的attachfile方法&amp; 1.3仅接受路径,并且没有后续版本的附加功能,因此&#34; hack&#34;