PHP嵌入式图像未显示在Web浏览器上

时间:2016-12-05 03:40:34

标签: php email

我用PHP发送电子邮件简报。在PHP内部,我有类似

的内容
<?php
//define the receiver of the email
set_time_limit(0);
$to='123@gmail.com';
$subject = 'test';
//create a boundary string. It must be unique
//so we use the MD5 algorithm to generate a random hash
$random_hash = md5(date('r', time()));
//define the headers we want passed. Note that they are separated with \r\n
$headers='MIME-Version: 1.0' . "\r\n";
$headers .= "From: 123@gmail.co.id\r\nReply-To: 123@gmail.co.id";
//add boundary string and mime type specification
$headers .= "\r\nContent-Type: text/html; boundary=\"PHP-mixed-".$random_hash."\"";

ob_start(); //Turn on output buffering

include ("contents.php");

$message = ob_get_clean();

//send the email
$mail_sent = @mail( $to, $subject, $message, $headers );
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed"
echo $mail_sent ? "Mail sent" : "Mail failed";
?>

这是contents.php文件

<?php 
// A few settings
$img_file = 'tes.jpg';

// Read image path, convert to base64 encoding
$imgData = base64_encode(file_get_contents($img_file));

// Format the image SRC:  data:{mime};base64,{data};
$src = 'data: '.mime_content_type($img_file).';base64,'.$imgData;

// Echo out a sample image
echo '<img src="'.$src.'">';
?>

当我用Android智能手机打开电子邮件时,正在显示图像。但是,当我使用Web浏览器或outlock打开它时,不会显示任何图像。我不确定它是否与Gmail出于安全原因使用的代理有关,或者是否是其他内容。无论哪种方式,我都想知道是否有人遇到过这种情况,如果有的话,它是如何解决的。

1 个答案:

答案 0 :(得分:0)

如何调查

可能的Gmail正在将img标记的src属性添加到其CDN端点之前。要验证src属性中的实际内容,请选择image元素并在开发人员工具中进行检查:

Image in Chrome Developer Tools

它可能看起来像https://ci6.googleusercontent.com/proxy/...#data: image/gif...,它不是有效的网址。

计划A

如果Gmail正在查找文件的URL而不是数据URI,您可以upload the file to Amazon S3并在src属性中指向它。

计划B

试试这个:

echo '<div style="background: url('.$src.') no-repeat left center;">';

而不是:

echo '<img src="'.$src.'">';