【问题标题】:PHP IMAP email content and MySQL encodingPHP IMAP 电子邮件内容和 MySQL 编码
【发布时间】:2016-01-15 20:37:27
【问题描述】:

这是我长期以来一直在努力解决的问题。我真的希望有人可以帮助我。

我有一个 PHP 程序从 IMAP 邮箱读取电子邮件。在使用 PHP IMAP 函数一段时间后,我设法在变量中获取电子邮件的纯文本内容。

当我在日志文件中对此变量执行 var_dump 时,我得到了一些很好且可读的东西。

但是,当我尝试将此变量的值保存到我的 MySQL 数据库时,它有时会失败,具体取决于原始电子邮件的编码。

我说这是由于编码,因为它经常在第一个“特殊字符”处失败。因此,仅显示电子邮件的一部分。

有什么方法可以“清理”该变量的值以在我的 MySQL 数据库中使用?我的 MySQL 数据库的排序规则当前设置为 utf8_unicode_ci

这是我到现在一直在使用的解码功能:

static function decode_text($text, $encoding)
{
    //return quoted_printable_decode($text);
    switch ( $encoding ) {
        # 7BIT
        case 0:
            return imap_utf7_decode($text);
        # 8BIT
        case 1:
            return imap_utf8($text);
        # BINARY
        case 2:
            return imap_binary($text);
        # BASE64
        case 3:
            return imap_base64($text);
        # QUOTED-PRINTABLE
        case 4:
            return imap_qprint($text);
        # OTHER
        case 5:
            return $text;
        # UNKNOWN
        default:
            return $text;
    }
}

感谢您的帮助!

【问题讨论】:

  • 如果您将 imap 电子邮件存储在 mysql 数据库中,则不需要。
  • 做得好,PHP+MySQL 永远不需要像你的函数那样解码。所以我会假设 Imap 是问题所在。请提供样本的编码和所需解码(均以十六进制格式)。

标签: php mysql email encoding imap


【解决方案1】:

我写了这个github repository来处理这个问题。

使用 IMAP 从邮箱中读取电子邮件,然后将返回的电子邮件解析为对开发人员友好的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 2011-01-16
    相关资源
    最近更新 更多