我在使用 php 和 imap 获取电子邮件时遇到了一些问题。每个发件人都会发送以不同字符集编码的电子邮件,因此很难为我制定一个通用的解决方案。
如果我想在不丢失数据的情况下将 from、to、subject 和 body/html 提取到 UTF-8 字符串中,如何最简单地完成?
我已经尝试了几个小时寻找解决方案,但我当前的代码并没有解决问题。
问候。
您不能只说“从 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 类。
您可以尝试使用该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"