如何在cakephp中的电子邮件中添加公司徽标?

时间:2012-04-25 12:04:05

标签: image email cakephp

我已经为邮件模板创建了页面,并为预览模板设置了按钮。

我已经从我的本地机器设置了图像路径,例如

  src="/projectname/app/webroot/img/logo.JPG"

当我预览该模板时,它会显示徽标。

当我发送邮件图像时使用该模板时,电子邮件中不会显示。

所以有人可以告诉我可能是什么问题,或者我错过了像mime类型的东西吗?

谢谢,

5 个答案:

答案 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;