php-imap_fetchbody消息已编码

php-imap_fetchbody消息已编码,php,email,imap,Php,Email,Imap,我正在开发一个web应用程序,用户可以在其中查看发送到其帐户的电子邮件。我对他们信息的编码有一些问题 作为测试,我刚收到一封来自网站的注册电子邮件。邮件中包含HTML 应该是这样的: Thanks for signing up to Virally, we're excited to have you using our product!  Start Capturing Leads with Virally! Click here to make your first campa

我正在开发一个web应用程序,用户可以在其中查看发送到其帐户的电子邮件。我对他们信息的编码有一些问题

作为测试,我刚收到一封来自网站的注册电子邮件。邮件中包含HTML

应该是这样的:

Thanks for signing up to Virally, we're excited to have you using our product!  Start Capturing Leads with Virally! Click here to make your first campaign >> You'll need a digital reward to create a campaign, like an eBook, Whitepaper, Video, free book chapter, Podcast etc. (We can help with this if you don't have anything of your own, just ask) Please hit reply to this email if you'd like some help getting started. Thanks, Liam Gooding liam@virallyapp.com Virally Co-founder VGhhbmtzIGZvciBzaWduaW5nIHVwIHRvIFZpcmFsbHksIHdlJ3JlIGV4Y2l0ZWQgdG8gaGF2ZSB5 b3UgdXNpbmcgb3VyIHByb2R1Y3QhwqAgCiAgU3RhcnQgQ2FwdHVyaW5nIExlYWRzIHdpdGggVmly YWxseSEgIAogIENsaWNrIGhlcmUgdG8gbWFrZSB5b3VyIGZpcnN0IGNhbXBhaWduICZndDsmZ3Q7 ICAKICBZb3UnbGwgbmVlZCBhIGRpZ2l0YWwgcmV3YXJkIHRvIGNyZWF0ZSBhIGNhbXBhaWduLCBs aWtlIGFuIGVCb29rLCBXaGl0ZXBhcGVyLCBWaWRlbywgZnJlZSBib29rIGNoYXB0ZXIsIFBvZGNh c3QgZXRjLiAoV2UgY2FuIGhlbHAgd2l0aCB0aGlzIGlmIHlvdSBkb24ndCBoYXZlIGFueXRoaW5n IG9mIHlvdXIgb3duLCBqdXN0IGFzaykgIAogIFBsZWFzZSBoaXQgcmVwbHkgdG8gdGhpcyBlbWFp bCBpZiB5b3UnZCBsaWtlIHNvbWUgaGVscCBnZXR0aW5nIHN0YXJ0ZWQuICAgClRoYW5rcywgIAog TGlhbSBHb29kaW5nICBsaWFtQHZpcmFsbHlhcHAuY29tICBWaXJhbGx5IENvLWZvdW5kZXIgICAg 感谢您注册Virly,我们很高兴您能使用我们的产品!  开始捕捉线索与病毒! 单击此处进行您的第一次活动>> 创建活动需要数字奖励,如电子书、白皮书、视频、免费图书章节、播客等(如果您没有自己的内容,我们可以提供帮助,请询问) 请点击回复此电子邮件,如果您想要一些帮助开始。 谢谢 利亚姆·古丁liam@virallyapp.comVirally联合创始人 这就是它在我的收件箱里的样子;虽然在我的网站上看起来是这样的:

Thanks for signing up to Virally, we're excited to have you using our product!  Start Capturing Leads with Virally! Click here to make your first campaign >> You'll need a digital reward to create a campaign, like an eBook, Whitepaper, Video, free book chapter, Podcast etc. (We can help with this if you don't have anything of your own, just ask) Please hit reply to this email if you'd like some help getting started. Thanks, Liam Gooding liam@virallyapp.com Virally Co-founder VGhhbmtzIGZvciBzaWduaW5nIHVwIHRvIFZpcmFsbHksIHdlJ3JlIGV4Y2l0ZWQgdG8gaGF2ZSB5 b3UgdXNpbmcgb3VyIHByb2R1Y3QhwqAgCiAgU3RhcnQgQ2FwdHVyaW5nIExlYWRzIHdpdGggVmly YWxseSEgIAogIENsaWNrIGhlcmUgdG8gbWFrZSB5b3VyIGZpcnN0IGNhbXBhaWduICZndDsmZ3Q7 ICAKICBZb3UnbGwgbmVlZCBhIGRpZ2l0YWwgcmV3YXJkIHRvIGNyZWF0ZSBhIGNhbXBhaWduLCBs aWtlIGFuIGVCb29rLCBXaGl0ZXBhcGVyLCBWaWRlbywgZnJlZSBib29rIGNoYXB0ZXIsIFBvZGNh c3QgZXRjLiAoV2UgY2FuIGhlbHAgd2l0aCB0aGlzIGlmIHlvdSBkb24ndCBoYXZlIGFueXRoaW5n IG9mIHlvdXIgb3duLCBqdXN0IGFzaykgIAogIFBsZWFzZSBoaXQgcmVwbHkgdG8gdGhpcyBlbWFp bCBpZiB5b3UnZCBsaWtlIHNvbWUgaGVscCBnZXR0aW5nIHN0YXJ0ZWQuICAgClRoYW5rcywgIAog TGlhbSBHb29kaW5nICBsaWFtQHZpcmFsbHlhcHAuY29tICBWaXJhbGx5IENvLWZvdW5kZXIgICAg VGHbHbMtZgZvCibZawduaw5NihvWihrvifzPcmfSbhksihdlJ3JLigv4y2l0ZwQgdg8Gagf2zsb5 B3UGDXNPBMCGB3VYIHB2R1Y3QHWQAGCIAGU3RHCNQGQ2FWDHVYAW5NIEXLYWRZIHDPDGGGVMLY YWXSesegiagiogensawnrighlCMUGDG8GBWFRZSB5B3VYIGZPCNN0IGNHBXbawDuiczNDSMZ3Q7 ICAKICBZB3UNBGWGBMVLZCBHIGRPZ2L0YWGCMV3YXJKIHRVIGNYZWF0ZSBHIGNHBXBAWDULCBS AWTLIGFIGVCB29RLCBXAGL0ZXbHCGVylCBWAWRLBYWGZNJLZSBIB29RIGNOYXB0ZXISIFBVZGNH C3QGZXRJYALV2UGY2FUIGHLBHAGD210ACB0AGLZIGLMIHLVDSBKB24NDCBOYXZLIFGUEXROAW5N IG9MIHLVDXIGB3DULCBQDXN0IGFZWFZZSBOAXQGCMVWBHKGDG8GDGHPCYBBWFP BCBPZIB5B3UNZCBSAWTLIHNVWUGAGVSCCBNZXR0AW5NIHN0YXJ0ZWQUICAGCLROYW5RCYWGIAOG TGLHBSBHB29KAW5NICBSAWFTQHZPCMFSBHLHCHAUY29TICBWAXJHBG05IENVLWZVDW5KZXIGICAG 这是我的PHP代码:

$openmail = imap_open($dns,$email,$password ) or die("Cannot Connect ".imap_last_error());

if ($openmail) {
  echo  "<div class='noti success'>You have ".imap_num_msg($openmail). " messages in your inbox</div>\n\r";
  $tot=imap_num_msg($openmail);
  for($i=$tot;$i>0;$i--) {

    $header = imap_header($openmail,$i);
    echo "<br>";
    echo $header->Subject." (".$header->Date.")";
    $body = imap_fetchbody($openmail, $i,'1');

    echo "<div class='faq-tile'>$body</div>";
  }
  imap_close($openmail);
}
$openmail=imap\u打开($dns,$email,$password)或死亡(“无法连接”.imap\u last\u error());
如果($openmail){
回显“You have”.imap\u num\u msg($openmail)。“收件箱中的邮件\n\r”;
$tot=imap\u num\u msg($openmail);
对于($i=$tot;$i>0;$i--){
$header=imap_头($openmail,$i);
回声“
”; echo$header->Subject.(“$header->Date.”); $body=imap_fetchbody($openmail,$i,'1'); 回声“$body”; } imap_关闭($openmail); }

$body
变量是打印邮件正文的变量。

在本例中,从
imap\u fetchbody
获取的内容是base64:

$body = imap_fetchbody($openmail, $i,'1');

if (preg_match('/^([a-zA-Z0-9]{76} )+[a-zA-Z0-9]{76}$/', $body)) {
    $body = base64_decode($body);
}

echo "<div class='faq-tile'>$body</div>";
$body=imap_fetchbody($openmail,$i,'1');
if(preg_match('/^([a-zA-Z0-9]{76})+[a-zA-Z0-9]{76}$/',$body)){
$body=base64_解码($body);
}
回声“$body”;

你还应该读一读

它看起来像某种base64。您是否尝试过
base64\u decode
?我尝试过将imap\u fetchbody切换到base64,这只是删除了整个内容。没有打印任何内容。好的,这对特定的信息有效。我刚刚尝试从我的hotmail/outlook帐户发送电子邮件,现在看起来是这样的:��^N��Z�实际上不要想。然后我需要一种不同于不同编码风格的方法。这怎么可能?@oliverbj检查我的编辑-这应该会有帮助(如果base64始终遵循这些规则),您应该查看内容传输编码标题。如果您中的任何人都看过PHP的IMAP扩展手册,您会意识到这不是检测编码的方法。使用
imap_fetchstructure()
收集有关电子邮件部分的信息,并使用数组中的
编码
索引获取数据编码方法
3
等于Base64,
4
表示引用的可打印字符串。不要尝试自己检测编码,你会失败的。H2Oooo代码的问题在于,它将匹配任何普通文本数据,无论是否编码,如果它实际上不是Base64,则将其置乱。