具有嵌入式图像的IMAP PHP未在localhost上显示Codeigniter

时间:2017-12-24 06:31:11

标签: php codeigniter imap php-imap

我使用codeigniter和imap php正在开发项目xampp。由于某种原因,他们嵌入的图像没有显示。

在我的getBody()函数中,我有这个回调

<select (change) = "ChangeValue($event)" (ngModel)="opt">   
    <option *ngFor=" let opt of titleArr" [value]="opt"></option>
</select>

enter image description here

enter image description here

  

我收到错误

enter image description here

  

问题:如何确保文本/ 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);

1 个答案:

答案 0 :(得分:1)

简介

您正在尝试将电子邮件转换为HTML页面。

电子邮件有多个部分:

  1. 接头
  2. 基于文字的电子邮件
  3. 基于HTML的电子邮件
  4. 附件
  5. 在标题中,您会找到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查找零件
    • 从Base64或其他使用的编码解码(检查Content-Transfer-Encoding标头)
    • 将文件作为HTTP响应提供

    哪个部分有我的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文件提供。

    用PHP实现的Webmail

    RoundCube是一个用PHP实现的网络邮件,你可以看看他们是如何做到的:https://github.com/roundcube/roundcubemail/blob/master/program/lib/Roundcube/rcube_washtml.php

    注意:我的代码并非基于此解决方案。