2013-03-26 84 views
2

我遇到問題。用wp_mail顯示內嵌圖像附件

我想附加一個圖像到一個電子郵件,並顯示它內聯,與其他一些PHP生成的內容。問題是我沒有絲毫的ideea如何使用內聯wp_mail用來附加的文件附件數組。

我的解決辦法是進行編碼以base64的圖像,並把他們內聯這樣的HTML:

<img alt="The Alt" src="data:image/png;base64,*etc*etc*etc" /> 

但問題是,Gmail的/ Outlook中去除圖像中的src數據。因此,土地作爲

<img alt="The Alt" /> 

任何線索什麼改變(頭使用Base64工作)或如何使用附件內聯嵌入他們?

謝謝, 拉杜。

回答

11

wp_mail使用PHPMailer類。此類具有內聯附件所需的全部功能。 要在wp_mail()發送電子郵件之前更改phpmailer對象,可以使用過濾器phpmailer_init

$body = ' 
Hello John, 
checkout my new cool picture. 
<img src="cid:my-cool-picture-uid" width="300" height="400"> 

Thanks, hope you like it ;)'; 

這是如何將圖片插入到您的電子郵件正文的示例。

$file = '/path/to/file.jpg'; //phpmailer will load this file 
$uid = 'my-cool-picture-uid'; //will map it to this UID 
$name = 'file.jpg'; //this will be the file name for the attachment 

global $phpmailer; 
add_action('phpmailer_init', function(&$phpmailer)use($file,$uid,$name){ 
    $phpmailer->SMTPKeepAlive = true; 
    $phpmailer->AddEmbeddedImage($file, $uid, $name); 
}); 

//now just call wp_mail() 
wp_mail('[email protected]','Hi John',$body); 

就是這樣。

+1

在'file.jpg'之後記住行尾的分號 – janlindso 2014-10-25 22:26:49

3

如果您收到意外的T_FUNCTION錯誤,那是由於PHP版本< 5.3。在這種情況下,創建一個函數來做到這一點在一個更傳統的方式:

function attachInlineImage() { 
    global $phpmailer; 
    $file = '/path/to/file.jpg'; //phpmailer will load this file 
    $uid = 'my-cool-picture-uid'; //will map it to this UID 
    $name = 'file.jpg'; //this will be the file name for the attachment 
    if (is_file($file)) { 
    $phpmailer->AddEmbeddedImage($file, $uid, $name); 
    } 
} 

add_action('phpmailer_init','attachInlineImage'); 
1

我需要這在一個小更好的辦法,因爲我在一個步驟中發送多個郵件,而不是所有的郵件應具有相同的嵌入式圖片。所以我用從康斯坦丁但我修改該解決方案:-)

wp_mail('[email protected]', 'First mail without attachments', 'Test 1'); 

$phpmailerInitAction = function(&$phpmailer) { 
    $phpmailer->AddEmbeddedImage(__DIR__ . '/img/header.jpg', 'header'); 
    $phpmailer->AddEmbeddedImage(__DIR__ . '/img/footer.png', 'footer'); 
}; 
add_action('phpmailer_init', $phpmailerInitAction); 
wp_mail('[email protected]', 'Mail with embedded images', 'Example <img src="cid:header" /><br /><img src="cid:footer" />', [ 
    'Content-Type: text/html; charset=UTF-8' 
], [ 
    __DIR__ . '/files/terms.pdf' 
]); 
remove_action('phpmailer_init', $phpmailerInitAction); 

wp_mail('[email protected]', 'Second mail without attachments', 'Test 2'); 

第一wp_mail將是不帶附件。 第二個wp_mail將包含嵌入的圖像。 第三個wp_mail將沒有附件。

它的正常工作,現在

0

AddEmbeddedImage只接受兩個參數,所以一定不包括$ name參數作爲例子。

+1

這也有助於提供文檔鏈接,以支持您的聲明和進一步的研究。 – sjaustirni 2018-02-27 13:17:15