2011-03-30 301 views
0

我在运行时使用php动态生成图像,并通过浏览器将其显示在基本64位。 我需要通过电子邮件发送这个相同的页面/ html文档,但是这种显示图像的方法不适用于电子邮件。通过电子邮件使用php代码点燃电子邮件在64位电子邮件内联图像

我已经发现了两个代码点火器库,试图帮助我完成这个任务,其中两个不工作 http://thecodeabode.blogspot.com/2010/11/codeigniter-and-php-howto-embedding.html

http://codeigniter.com/wiki/Richmail/

第一个给我

无法发送使用PHP邮件()的电子邮件。 您的服务器可能未配置为 使用此方法发送邮件。

来源: “SystemDDX” 返回路径: 回复: “[email protected]” X-发件人:[email protected] X - 梅勒:笨X-优先级:3 (Normal)Message-ID: < [email protected]> Mime-Version:1.0内容类型: text/plain;字符集= UTF-8 内容传输编码:8位

第二个是非常过时的

,我已经成功至今获得的工作是使用代码点火器的唯一方法 $此 - >电子邮件 - >附加(“C:\ myfile.jpg”) 然后在我的HTML参考中使用<img src='cid:myfile.jpg' />
问题是我的图像是在base64中,因为我动态生成它,所以如果我无法弄清楚其他任何东西,我怎么能将base 64恢复到一个特定的文件名,同时保存在内存中。

请任何提示和帮助,将不胜感激

回答

2

,我已经成功地获得工作,到目前为止是唯一的方法... <img src='cid:myfile.jpg' />

好,因为这是它的方式需要被完成。正如你所发现的,内嵌64位图像的非常支持以外的出血性边缘浏览器。

的问题是我的形象就是以base64为我生成动态地,所以如果我不能想出别的,我怎么能恢复基地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(); 
} 
+0

感谢Charles SwiftMailer看起来很有趣我会试试看,但我想要fi如果可能的话,也可以原生地提供解决方案。我用这个函数得到base64。我动态生成迷你图形并使用它来获取内容函数OutputToDataURI(){ob_start(NULL,4096); $ this-> Output(); header('Content-type:text/html'); return“data:image/png; base64,”。base64_encode(ob_get_clean()); } – user391986 2011-03-30 03:19:13

+0

@user,我已经更新了我的帖子,演示了如何获取原始图像数据,并给出了作为源发布的函数。 – Charles 2011-03-30 03:28:28

+0

我怎么会在代码中引用它,什么是“文件名”?用于cid? – user391986 2011-03-30 05:02:29