使用php code igniter通过电子邮件发送基本64中的内嵌图像

时间:2011-03-30 01:27:15

标签: php

我在运行时使用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位

第二个是非常过时的

到目前为止,我设法实现的唯一方法是使用代码点火器 $这 - &GT;的电子邮件 - &GT;附加( “C:\ myfile.jpg”) 然后在我的html参考中使用<img src='cid:myfile.jpg' />
问题是我的图像在base64中,因为我正在动态生成它,所以如果我无法弄清楚其他任何东西,我怎样才能将base 64恢复为特定的文件名,同时将其保留在内存中。

请不要提示和帮助

1 个答案:

答案 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();
}