PHP IMAP邮件内容和MySQL编码


PHP IMAP email content and MySQL encoding

这个问题我已经纠结很久了。我真的希望有人能帮助我。

我有一个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;
    }
}

谢谢你的帮助!

我编写了这个github存储库来处理这个问题。

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