2011-04-01 13 views
2

我正在寫一個郵件插件在php用戶信息,我想要集成多個圖像在base64編碼,問題是,只有第一個圖像被集成。任何解決方案所有的路徑都是正確的,並且html是成功集成的。如果我更換集成在代碼中的圖像的順序,Mail中顯示的圖像也會更改,因此它們都可用,但不會同時顯示。PHP的問題包括多個圖像的HTML郵件

<?php 

    $ImageLocation ="images/logo.gif"; 
    $ImageLocationRight ="images/right2.jpg"; 
    $ImgName = "logo.gif"; 
    $ImgNameRight = "right2.jpg"; 
    $MailFrom="Tool"; 
    $MailFromAdr="[email protected]"; 
    $MailTo ="[email protected]"; 
    $MailToSubject = "$subject"; 

    $CID = md5(uniqid (rand(), 1)); 

    $mime_boundary = "" . md5(uniqid(mt_rand(), 1)); 


    $Header= "From:$MailFrom<$MailFromAdr>\n"; 
    $Header.= "X-mailer: PHP/" . phpversion(). "\n"; 
    $Header.= "MIME-Version: 1.0\n"; 
    $Header.= "Content-Type: multipart/related; boundary=\"".$mime_boundary."\"; type=\"text/plain\"\n"; 

    $MailBody = "--".$mime_boundary."\n"; 
    $MailBody.= "Content-Type: Text/HTML; charset=iso-8859-1$EOL"; 
    $MailBody.= "Content-Transfer-Encoding: quoted-printable\n\n"; 
    $MailBody.= file_get_contents("../mail/mail.htm"); 
    $MailBody.= "\n\n"; 
    $MailBody.= "--".$mime_boundary."\n"; 

    $MailBody= str_replace("images/logo.gif", "cid:$CID.$ImgName", $MailBody); 
    $MailBody= str_replace("images/right2.jpg", "cid:$CID.$ImgNameRight", $MailBody); 





    $fpr = fopen ($ImageLocationRight, "rb"); 
    $strr = fread ($fpr, filesize ($ImageLocationRight)); 
    $datar = chunk_split(base64_encode($strr)); 
    $content.= "Content-Type: image/jpg\n"; 
    $content.= "Content-ID: <$CID.$ImgNameRight>\n"; 
    $content.= "Content-Transfer-Encoding: base64\n"; 
    $content.= "Content-Disposition: inline; filename=\"$ImgNameRight\"\n\n"; 
    fclose($fpr); 

    $content.= $datar."\n"; 

    $MailBody.= $content; 
    $MailBody.= "--".$mime_boundary."--\n"; 

    $fp = fopen ($ImageLocation, "rb"); 
    $str = fread ($fp, filesize ($ImageLocation)); 
    $data = chunk_split(base64_encode($str)); 
    $content = ""; 
    $content.= "Content-Type: image/gif\n"; 
    $content.= "Content-ID: <$CID.$ImgName>\n"; 
    $content.= "Content-Transfer-Encoding: base64\n"; 
    $content.= "Content-Disposition: inline; filename=\"$ImgName\"\n\n"; 
    fclose($fp); 


    $content.= $data."\n"; 

    $MailBody.= $content; 
    $MailBody.= "--".$mime_boundary."--\n"; 

    echo $MailBody; 

    mail($MailTo, $MailToSubject, $MailBody, $Header); 
?> 
+1

只是一個建議,如果你發送了很多郵件,你可能想使用一個預先存在的郵件庫來做所有繁重的工作。我使用swiftMail很多。 – JohnP 2011-04-01 08:20:54

+0

請不要HTML郵件!哎呀! – 2011-05-30 00:26:22

回答

2

如果你還沒有找到一個解決方案,我遇到了類似的問題,終於得到了它是什麼導致這個!

您將您的第一個圖像剛過,剛剛消除對MIME邊界收盤破折號:

而不必此代碼:

$MailBody.= "--".$mime_boundary."--\n"; 

代替試試這個:

$MailBody.= "--".$mime_boundary."\n"; 

這僅適用於最後一張圖像之前的所有圖像,必須將最後一張圖像中的最後一個圖像保留。

0

嗨,你不是與您$ mailbody字符串的圖像。你的代碼應該是這樣的

 
$MailBody .= str_replace("images/logo.gif", "cid:$CID.$ImgName", $MailBody); 
$MailBody .= str_replace("images/right2.jpg", "cid:$CID.$ImgNameRight", $MailBody); 
+0

我不認爲我必須這樣做,因爲str_replace只能用HTML代替我的佔位符,這是正確的。 – 2011-04-01 08:32:58