Php电子邮件,图片未在Outlook和Android Gmail中显示

时间:2013-04-18 16:46:14

标签: php email

我正在发送一封带有php的电子邮件。我有3张图像作为桌面背景,因为我被建议做。问题是在Outlook nad Adroid Gmail应用程序中查看时无法看到电子邮件图像。

以下是使用的代码:

$headers = "From:  Furniture \r\n";
$headers .= "Reply-To: info@furniture.com \r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

$message = '<html><body style="margin: 0;">';
$message .= '<table background="http://mysite.com/emailfinal1.jpg" border="0" width="650" height="506" style="font-family: arial, tahoma;color: black; margin: 0;">
<tr height="308" width="650"><td width="450"></td><td></td></tr>
<tr height="16" width="650" style="font-size:12px;"><td width="450">&nbsp;</td><td align="left" valign="bottom">'. $first_name . ' ' . $last_name . '</td></tr>
<tr height="16" width="650" style="font-size:12px;"><td width="450">&nbsp;</td><td align="left" valign="bottom">'. $email . '</td></tr>
<tr height="16" width="650" style="font-size:12px;"><td width="450">&nbsp;</td><td align="left" valign="bottom">'. $nextdate . '</td></tr>
<tr height="134" width="650"><td width="450"></td><td></td></tr>
</table>
<table background="http://mysite.com/emailfinal2.jpg" border="0" width="650" height="133" style="font-family: arial, tahoma;color: #29468a; margin: 0;">
<tr height="10" width="650"><td width="175"></td><td></td></tr>
<tr height="123" width="650" style="font-size:13px;"><td width="175">&nbsp;</td><td align="left" valign="baseline"><a href="http://www.mysite.com/unsubscribe.php" target="_blank" style="text-decoration: none;color: #29468a;">UNSUBSCRIBE</a> | <a href="http://www.mysite.com/Terms-And-Conditions.aspx" target="_blank" style="text-decoration: none;color: #29468a;">TERMS & CONDITIONS</a></td></tr>
</table>
<table background="http://mysite.com/emailfinal3.jpg" border="0" width="650" height="60" style="font-family: arial, tahoma;color: #29468a; margin: 0;">
<tr height="20" width="650"><td width="526"></td><td></td></tr>
<tr height="40" width="650" style="font-size:11px;"><td width="526">&nbsp;</td><td align="left" valign="baseline"><a href="http://www.mysite.com/Contact-Us.aspx" target="_blank" style="text-decoration: none;color: #29468a;">Contact Us</a></td></tr>
</table>';
$message .= "</body></html>";

有什么建议吗?我走错了方向吗?我想让电子邮件默认显示图片。

4 个答案:

答案 0 :(得分:1)

许多邮件客户端默认不显示像您这样的电子邮件中外部链接的图像。这样做是出于安全原因(如果我打开垃圾邮件,它不会自动向垃圾邮件发送者的网站发送http请求来获取图像,因为这样可以让垃圾邮件发送者跟踪我)。

大多数邮件客户端确实为用户提供了随后加载邮件的选项,但这并不总是理想的(很多用户都不会打扰 - 我通常不会这样做。)

解决方案是将图像嵌入电子邮件本身,因此它们是邮件的一部分。阻止外部图像的大多数邮件客户端将很乐意显示嵌入的图像。这是使用特殊构造的多部分消息完成的,但我不建议您自己构建它。

如果你还没有这样做(它看起来不像你),那么我建议使用像phpMailer或Swiftmailer这样不错的邮件程序类,而不是原始的PHP mail()函数。您将获得更多功能,包括将图像嵌入邮件的功能。这应该可以帮助您解决问题。 (作为奖励,它也可能使您的代码更清晰,更容易使用)。

答案 1 :(得分:0)

开发电子邮件以实现多个电子邮件客户端的兼容性很困难,因为他们每个人都有自己的HTML和CSS支持。您可能希望在开发电子邮件时强烈考虑使用电子邮件预览工具。您可能只是阻止了您的图像(这些天是许多电子邮件客户端的默认设置)。基本上我的建议是不依赖于图像的布局或电子邮件的可读性。

这篇文章包含多个电子邮件预览工具的链接:

http://www.smartinsights.com/email-marketing/email-creative-and-copywriting/email-preview-tools/

答案 2 :(得分:0)

出于安全/隐私原因,通常电子邮件客户端会阻止访问外部图像。 确保您已将发件人的电子邮件地址添加到白名单。

如果是你的情况,你不能为此做太多,因为这是客户方面的问题。 更好的方法是使用以下文本为您的网站提供超链接:

  

如果您无法查看下面的图片,请单击此处。

答案 3 :(得分:0)

首先你必须在你的应用程序中安装phpmailer库,然后在你的图像标签src中添加cid:image1,cid:image2,cid:image3。然后调用邮件发送功能,如下图所示,它将在所有浏览器中显示邮件垃圾邮件问题。

        $mail             = new PHPMailer();
        $body             = $body;
        $body             = eregi_replace("[\]",'',$body);
        $mail->Host       = "";      // sets GMAIL as the SMTP server
        $mail->Port       = 25;                   // set the SMTP port for the GMAIL server
        $mail->Username   = "";  // GMAIL username
        $mail->Password   = '';            // GMAIL password
        $mail->SetFrom($fr_email, ');
        $mail->AddReplyTo("");
        $mail->Subject    = $sub;
        $mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

        $mail->MsgHTML($body);
        $address = $to;
        $mail->AddAddress($address, "");
        $mail->AddAddress('rikinadhyapak@gmail.com', "");      
        $notificationpos1 = strpos(strtolower($sub), 'notification');
        $notificationpos2 = strpos(strtolower($sub), 'lead');      
        if($notificationpos1 === false && $notificationpos2 === false){
            //Attach an image file
            $mail->AddEmbeddedImage('images/image1.jpg','image1');
            $mail->AddEmbeddedImage('images/image1.jpg','image2');      
            $mail->AddEmbeddedImage('images/image2.jpg','image3');      
           // attach file logo.jpg, and later link to it using identfier logoimg
        }
            if(!$mail->Send()) {
              echo "Mailer Error: " . $mail->ErrorInfo;
            } else {
              echo "Message sent!";
            }