PHP / IMAP:内容邮件MIME转换

时间:2018-11-26 15:24:28

标签: php imap

我在这个主题上看过很多话题,但是没有一个能解决我的问题。请考虑这是我第一次使用IMAP,并且我想念一些东西。我想将邮箱中收到的邮件转换为“命令类型”。除了以MIME编码的邮件内容(我认为是这样)之外,其他所有东西都起作用,而且我不知道如何在UTF-8上获取它。请注意,我是法国人,所以我使用的是éèâçôì等字符。请参见下面的代码:

var json_string = '{"21":{"email":"abc@com"},"22":{"email":"abc2@com"}}';
var obj = JSON.parse(json_string);
obj[23] = {"email": "abc333@123.com"}
console.log(obj);

实际上,我只想显示所有收到的邮件。例如,我得到这样的值:

“卓悦,

测试标准cr = C3 = A9方向指示邮件。

公司。”

代替:

“卓悦,

测试方法指导书

公司。”

我见过很多建议同时使用imap_fetchstructure()和imap_fetchbody()的线程,但我认为这不会解决我的问题。使用imap_utf8()不起作用。

我还尝试创建自己的函数,将那些东西转换为正确的字符..但我认为这不是这样做的好方法。

有什么想法吗?

EDIT :quoted_printable_decode()可以正常工作,除了它用我无法处理的“ = \ r \ n”来剪掉长行。我已经在PHP文档中看到了一个骇客,但这似乎行不通。下面的代码。

if($imap = @imap_open($server , $username, $password)) {
    $num = imap_num_msg($imap);

    while($num > 0) {
        $sujet      = imap_mime_header_decode(cropSubject($headers->subject));
        $time       = $headers->udate;
        $fromMail   = $headers->from[0]->mailbox.'@'.$headers->from[0]->host;
        $fromUser   = $headers->from[0]->mailbox;
        $fromHost   = $headers->from[0]->host;
        $content    = nl2br(imap_fetchbody($imap, $num, '1'));

        echo $content;
        echo "<hr>";
    }
}

有什么主意我应该如何使它工作?

1 个答案:

答案 0 :(得分:0)

我使用@Max解决方案+我自己的代码来完成这项工作。见下文。

    $content = quoted_printable_decode($content);
    $c = explode("\r\n", $content);

    foreach($c as $key => $value) {
        if(substr($value, strlen($value) - 6, strlen($value)) == "<br />" && $value != "<br />" && substr($value, strlen($value) - 7, strlen($value)) != "=<br />") {
            $c[$key] = substr($value, 0, strlen($value) - 6);
        } elseif(strlen($value) >= 7 && substr($value, strlen($value) - 7, strlen($value)) == "=<br />") {
            $c[$key] = substr($value, 0, strlen($value) - 7);
        } elseif($value == "<br />") {
            $c[$key] = "\r\n\r\n";
        }
    }

    $content = implode("", $c);

请注意,这用于将值插入数据库,而不在页面上显示它们。仅仅炫耀电子邮件是行不通的。