php - imap_fetchbody 消息已编码

标签 php email imap

我正在构建一个网络应用程序,用户可以在其中查看发送到他们帐户的电子邮件。我在他们的消息编码方面遇到了一些问题。

作为测试,我刚收到一封来自网站的注册邮件。邮件包含 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    

That is how it looks in my inbox; although, on my website it looks like this:

VGhhbmtzIGZvciBzaWduaW5nIHVwIHRvIFZpcmFsbHksIHdlJ3JlIGV4Y2l0ZWQgdG8gaGF2ZSB5
b3UgdXNpbmcgb3VyIHByb2R1Y3QhwqAgCiAgU3RhcnQgQ2FwdHVyaW5nIExlYWRzIHdpdGggVmly
YWxseSEgIAogIENsaWNrIGhlcmUgdG8gbWFrZSB5b3VyIGZpcnN0IGNhbXBhaWduICZndDsmZ3Q7
ICAKICBZb3UnbGwgbmVlZCBhIGRpZ2l0YWwgcmV3YXJkIHRvIGNyZWF0ZSBhIGNhbXBhaWduLCBs
aWtlIGFuIGVCb29rLCBXaGl0ZXBhcGVyLCBWaWRlbywgZnJlZSBib29rIGNoYXB0ZXIsIFBvZGNh
c3QgZXRjLiAoV2UgY2FuIGhlbHAgd2l0aCB0aGlzIGlmIHlvdSBkb24ndCBoYXZlIGFueXRoaW5n
IG9mIHlvdXIgb3duLCBqdXN0IGFzaykgIAogIFBsZWFzZSBoaXQgcmVwbHkgdG8gdGhpcyBlbWFp
bCBpZiB5b3UnZCBsaWtlIHNvbWUgaGVscCBnZXR0aW5nIHN0YXJ0ZWQuICAgClRoYW5rcywgIAog
TGlhbSBHb29kaW5nICBsaWFtQHZpcmFsbHlhcHAuY29tICBWaXJhbGx5IENvLWZvdW5kZXIgICAg

This is my PHP code:

$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);
}

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

最佳答案

在这种情况下,您从 imap_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>";

您还应该阅读 Can't fetch plain text mails content using IMAP

关于php - imap_fetchbody 消息已编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20838071/

相关文章:

iphone - 电子邮件应用程序、获取消息预览

php - 如何将电子邮件的内容显示到网站?

PHP Eclipse 语法颜色变化

php - 分页以显示最大值并限制其余值

android - 在 Android 中不使用外部邮件客户端发送邮件

c - 如何在 IMAP c-client 库中支持 OAUth

php - 如何使用 PHP 安全地将 JSON 数据写入文件

php - 如何在 PHP 中获取受 MySQL 查询影响的行?

java - 如何从数据库中检索图像并将其显示在 div 上

python - 如何在Python中区分电子邮件html正文和html附件?