PHP mail() - 图像并不总是加载

Posted

技术标签:

【中文标题】PHP mail() - 图像并不总是加载【英文标题】:PHP mail() - Images don't always load 【发布时间】:2015-07-24 11:01:44 【问题描述】:

我有一个 php 邮件脚本,基本上如下:

$result = mail($to, $subject, $message, $headers);
if(!$result)    
  echo "Error";   
 else 
  echo "Success";

$message 是一个 html 电子邮件,在我的电子邮件客户端中大部分都可以正常显示,只是图像似乎只是偶尔加载。

图片都是这样的:

<img src='http://www.mywebsite.com/media/twitter.png' />

我不明白为什么有些会加载而有些不会,当它们都以相同的方式设置时。

我读到最好将图像作为附件嵌入到电子邮件中,但我不确定如何执行此操作。您似乎添加了这样的一行:

<img src='cid:123456789'>

但是这指的是什么?我将如何编码这样的图像?

任何帮助将不胜感激!谢谢

【问题讨论】:

【参考方案1】:

您必须对文件进行 base64 编码。

我在 github 上找到了一个代码示例。我自己还没有测试过,但应该会在正确的方向上给你一个很好的推动......

   $picture = file_get_contents($file);
   $size = getimagesize($file);

   // base64 encode the binary data, then break it into chunks according to RFC 2045 semantics
   $base64 = chunk_split(base64_encode($picture));
   echo '<img src="data:' . $size['mime'] . ';base64,' . "\n" . $base64 . '" ' . $size[3] . ' />', "\n";

来源:https://gist.github.com/jasny/3938108

作为旁注。您使用的图像是否经过网络优化?大图像可能会被电子邮件客户端阻止,或者只是没有被电子邮件客户端下载。

【讨论】:

谢谢!在了解了 base64 之后,我发现了这篇出色的帖子 - ***.com/a/1607263/4120885。我通过他的功能喂了我的$message,它嵌入了图像

以上是关于PHP mail() - 图像并不总是加载的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 从 Mysql 数据库生成的 html MAIL 中显示图像?

背景图像并不总是出现[关闭]

React 状态更改并不总是适用于移动网络

CoreData 中的文本并不总是被绘制

为啥 QSplashscreen 并不总是有效?

CollectionView 并不总是正确显示数据