【问题标题】:Fetch email from imap and convert to UTF-8从 imap 获取电子邮件并转换为 UTF-8
【发布时间】:2016-06-20 17:25:42
【问题描述】:

我在使用 php 和 imap 获取电子邮件时遇到了一些问题。 每个发件人都会发送以不同字符集编码编码的电子邮件,因此很难为我制定一个通用的解决方案。

如果我想在不丢失数据的情况下将 from、to、subject 和 body/html 提取到 UT​​F-8 字符串中,如何最简单地做到这一点?

我已经尝试寻找解决方案几个小时,但我当前的代码无法解决问题。

您好。

【问题讨论】:

    标签: php encoding utf-8 imap pop3


    【解决方案1】:

    您不能只说“从 imap 获取电子邮件并将其转换为 utf-8”。您需要使用以下内容获取电子邮件部分:

    $struct = $this->imap_fetchstructure($this->mbox, $mId, FT_UID);
    

    然后从该电子邮件中选择您要做什么。在你决定了你需要什么之后,然后像这样说 converto to that and that:

    if($partStruct->encoding == 1) {
        $data = $this->imap_utf8($data);
    }
    elseif($partStruct->encoding == 2) {
        $data = $this->imap_binary($data);
    }
    elseif($partStruct->encoding == 3) {
        $data = $this->imap_base64($data);
    }
    elseif($partStruct->encoding == 4) {
        $data = $this->imap_qprint($data);
    } 
    //etc.....
    

    我只是从我的班级复制/粘贴其他部分,您必须自己弄清楚!如果您正在为此寻找简单的解决方案,让我告诉您没有。您可以随时从互联网上下载一些 imap php 类。

    【讨论】:

      【解决方案2】:

      您可以尝试使用mb_detect_encoding()函数:http://php.net/manual/en/function.mb-detect-encoding.php

      然后mb_convert_encoding(): http://php.net/manual/en/function.mb-convert-encoding.php 转为 UTF-8。

      您还可以检查电子邮件标头,查找 Content-Type 标头,参见示例:

      Content-Type: text/html; charset="UTF-8"
      

      【讨论】:

      • 但是为什么呢?每封电子邮件都包含有关其编码方式的确切信息。无需猜测(mb_detect_encoding 是哪个)。
      • @Pekka - 如何检测并将其转换为 UTF-8?
      • @RoboForm 是的,Pekka 是对的,你可以解析邮件头,有一个内容编码头,寻找这样的东西:Content-Type: text/html; charset="encoding name"
      猜你喜欢
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 2011-05-30
      • 2019-02-25
      • 1970-01-01
      相关资源
      最近更新 更多