我使用codeigniter和imap php正在开发项目xampp。由于某种原因,他们嵌入的图像没有显示。
在我的getBody()函数中,我有这个回调
<select (change) = "ChangeValue($event)" (ngModel)="opt">
<option *ngFor=" let opt of titleArr" [value]="opt"></option>
</select>
我收到错误
问题:如何确保文本/ html正文等图像正确无误。
$body = preg_replace_callback(
'/src="cid:(.*)">/Uims',
function($m) use($email, $uid){
//split on @
$parts = explode('@', $m[1]);
//replace local path with absolute path
$img = str_replace($parts[0], '', $parts[0]);
return "src='$img'>";
},
$body);
答案 0 :(得分:1)
您正在尝试将电子邮件转换为HTML页面。
电子邮件有多个部分:
在标题中,您会找到Message-ID
以及其他相关元数据。
要将电子邮件转换为网站,您必须将HTML和附件公开给浏览器。
每个零件都有自己的标题。如果您有url='cid:Whatever'
,则必须查找电子邮件的哪一部分有 Content-Id标题。
将电子邮件作为网页提供
您需要找到包含HTML正文的电子邮件部分。解析它并替换已经实现该部分的http://yourhost/{emailId}
的CID网址,以便我不在此处添加如何操作。
替换HTML上的CID网址 - 实施
这是一个可能适合您的原型。
$mailHTML="<html>All your long code here</html>";
$mailId="email.eml";
$generatePartURL=function ($messgeId, $cid) {
return "http://myhost/".$messgeId."/".$cid; //Adapt this url according to your needs
};
$replace=function ($matches) use ($generatePartURL, $mailId) {
list($uri, $cid) = $matches;
return $generatePartURL($mailId, $cid);
};
$mailHTML=preg_replace_callback("/cid:([^'\" \]]*)/", $replace, $mailHTML);
按CID查找零件
http://yourhost/{emailId}/{cid}
伪代码:
哪个部分有我的CID图像?
迭代所有寻找符合您的CID值的 Content-ID标题的电子邮件部分。
--_part_boundery_
Content-Type: image/jpeg; name="filename.jpg"
Content-Description: filename.jpg
Content-Disposition: inline; filename="filename.jpg"; size=39619; creation-date="Thu, 28 Dec 2017 10:53:51 GMT"; modification-date="Thu, 28 Dec 2017 10:53:51 GMT"
Content-ID: <YOUR CID WILL BE HERE>
Content-Transfer-Encoding: base64
解码传输编码并将内容作为常规http文件提供。
RoundCube是一个用PHP实现的网络邮件,你可以看看他们是如何做到的:https://github.com/roundcube/roundcubemail/blob/master/program/lib/Roundcube/rcube_washtml.php
注意:我的代码并非基于此解决方案。