2011-03-30 237 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