我在运行时使用php动态生成图像,并通过浏览器将它们显示在base 64中。 我需要通过电子邮件发送相同的页面/ html文档,但这种显示图像的方法无法通过电子邮件发挥作用。
我找到了两个代码点火器库来尝试帮助我完成这个任务,其中两个不起作用 http://thecodeabode.blogspot.com/2010/11/codeigniter-and-php-howto-embedding.html
http://codeigniter.com/wiki/Richmail/
第一个给了我
无法使用PHP mail()发送电子邮件。 您的服务器可能未配置为 使用这种方法发送邮件。
发件人:“SystemDDX”返回路径: 回复:“internal-33e@google.com” X-Sender:internal-33ek@google.com X-Mailer:CodeIgniter X-Priority:3 (正常)消息ID: < 1d42c5c99deeb@google.com> Mime版本:1.0内容类型: 文本/无格式;字符集= utf-8的 内容传输编码:8位
第二个是非常过时的
到目前为止,我设法实现的唯一方法是使用代码点火器
$这 - >的电子邮件 - >附加( “C:\ myfile.jpg”)
然后在我的html参考中使用<img src='cid:myfile.jpg' />
问题是我的图像在base64中,因为我正在动态生成它,所以如果我无法弄清楚其他任何东西,我怎样才能将base 64恢复为特定的文件名,同时将其保留在内存中。
请不要提示和帮助
答案 0 :(得分:2)
到目前为止,我设法实现的唯一方法是......
<img src='cid:myfile.jpg' />
很好,因为这是应该做的。正如您所发现的那样,在最前沿的浏览器之外,内联的base64图像非常支持不足。
问题是我的图像在base64中,因为我正在动态生成它,所以如果我无法弄清楚其他任何东西,我怎样才能将base 64恢复为特定的文件名,同时将其保留在内存中。
那么,你是如何将该图像转换为base64的呢?您在图像数据上使用base64_encode
当然,对吧?
那么,不要那样做!
而是将图像数据写入磁盘上的新文件,然后在将新图像文件附加到外发邮件时引用该图像文件。问题解决了!
这假设您选择的电子邮件库中的附件方法只接受真实的文件 - 阅读文档,我敢打赌您可以直接传递图像数据 并同时给它一个“假的”文件名。
您可能需要考虑使用其他现代邮件库,例如SwiftMailer。它可以attach dynamic content顺利而轻松地完成。
我正在动态生成迷你图形图形并使用它来获取内容:
function OutputToDataURI() { ob_start(NULL,4096); $this->Output(); header('Content-type: text/html'); return "data:image/png;base64,".base64_encode(ob_get_clean()); }
在这种情况下,这将获得原始图像数据:
public function GetImageData() {
ob_start();
$this->Output();
return ob_get_clean();
}