0

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

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

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

问候。

4

2 回答 2

1

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

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

然后从该电子邮件中选择您要做什么。在你决定了你需要什么之后,然后像这样说 converto to that 和 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.....

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

于 2012-11-25T23:25:44.950 回答
0

您可以尝试使用该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"
于 2012-11-25T22:23:30.800 回答