2011-12-02 125 views
4

我想显示电子邮件的正文内容。我曾尝试在PHP中使用IMAP,但有些事情是非常错误的。 IMAP没有提供我的信息的正文。它只是拿起身上的签名。因此,我正在寻找将电子邮件正文内容读取到网页的其他方法。如何显示电子邮件的内容到网站?

这里是我的电子邮件的原始文件:

http://pastebin.com/WQra335P

免责声明/版权模糊正在被显示IMAP,但没有在身体其他抓起。任何人都可以选择从Gmail或任何其他可以将内容显示到网页的网站阅读电子邮件?

我已经放弃了使IMAP读它,因为没有人能弄清楚这个问题......我花了几个小时,所以我放弃了,但这里是代码...

<?php 
    /* connect to gmail */ 
    $hostname = '{imap.gmail.com:993/imap/ssl}INBOX'; 
    $username = '[email protected]'; 
    $password = 'password'; 

    /* try to connect */ 
    $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error()); 

    /* grab emails */ 
    $emails = imap_search($inbox,'ALL'); 

    /* if emails are returned, cycle through each... */ 
    if($emails) { 

     /* begin output var */ 
     $output = ''; 

     /* put the newest emails on top */ 
     rsort($emails); 

     /* for every email... */ 
     foreach($emails as $email_number) { 

      /* get information specific to this email */ 
      $overview = imap_fetch_overview($inbox, $email_number, 0); 
      $message = imap_fetchbody($inbox, $email_number, 2); 
      echo $message; 
      echo imap_qprint($message); 
      $message = imap_qprint($message); 
      echo imap_8bit ($message); 
      $DateFormatted = str_replace("-0500", "", $overview[0] -> date); 

      /* output the email header information */ 
      $output .= $overview[0] -> subject ; 
      $output .= $DateFormatted ; 

      //$bodyFormatted = preg_replace("/This e-mail(.*)/","",$message); 
      //$bodyFormatted = preg_replace("/Ce courriel(.*)/","",$bodyFormatted); 
      /* output the email body */ 
      $output .= $message; 

     } 

    echo $output; 

    } 

    /* close the connection */ 
    imap_close($inbox); 

?> 
+2

你可以发布你试图获取消息的'IMAP'代码吗? – Cyclonecode

回答

2

除了什么DmitryK建议,

添加下面让一切正常工作没有随机“=”的迹象。 Str_replace用于删除在页面上生成的“=”。

$message = imap_fetchbody($inbox, $email_number, "1.1"); 
$message = str_replace("=", "", $message); 

我不知道为什么是随机生成的“=” S 100%,但是这很可能是由于从Exchange Server的身边一些加密问题,因为我们的服务器是10岁左右。

0

Gmail中有一些不同的IMAP设置,按照原来的代码更加紧密:

http://davidwalsh.name/gmail-php-imap

+0

我有完全相同的代码,它不适用于我的电子邮件标题或从交换服务器到Gmail帐户的电子邮件。 IMAP无法读取除签名外的任何内容。但是,如果我采用相同的电子邮件内容并通过电子邮件将它们从gmail或电子邮件发送到gmail帐户,那么它会读取它们......这与我的电子邮件的格式或标题(来自交换服务器到Gmail)有关。这些标题是我发布在我的帖子的pastebin链接上面 – Bulvak

+0

Exchange服务器是不同的野兽,它完全不符合IMAP标准。 – 2011-12-05 17:15:30

+0

在这种情况下我能做些什么?总结它为我的gmail-gmail工作,但交换server-gmail does not work .. gmail-gmail意思是发送到gmail帐户的gmail电子邮件..或yahoo-gmail的意思yahoo电子邮件发送到gmail帐户 – Bulvak

2

您正在处理的多部分消息(看你的引擎收录的电子邮件样本)。 作为测试尝试使用这一行:下1.1 HTML版本

$message = imap_fetchbody($inbox, $email_number, "1.1"); 

纯文本版本居住为1.2 签名是在未来的一部分 - 它是2,这是你的代码样本中获取什么。

+0

谢谢,我正在使用“$ message = imap_fetchbody($ inbox,$ email_number,”1.1“);”这就是为什么我除了我的身体文本,添加.1固定标题,但“=”仍然存在。 – Bulvak

0

你有访问原始的电子邮件内容

如果是这样(与所有头等等的东西),请尝试使用plancacke email parser

我有很好的成功使用过。

$emailParser = new PlancakeEmailParser(...raw email content...); 

$emailTo = $emailParser->getTo(); 
$emailSubject = $emailParser->getSubject(); 
$emailCc = $emailParser->getCc(); 
$emailDeliveredToHeader = $emailParser->getHeader('Delivered-To'); 
$emailBody = $emailParser->getPlainBody(); 
$emailHtml = $emailParser->getHTMLBody(); 
相关问题