如何向网站显示电子邮件的内容?

时间:2011-12-02 19:38:05

标签: php email imap

我想显示电子邮件的正文内容。我在php中尝试过IMAP但是有些东西是非常错误的。 IMAP没有收集我的信息正文。它只能在身体中获取签名。所以我正在寻找将电子邮件正文内容读取到网页的替代方法。

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

http://pastebin.com/WQra335P

免责声明/版权模糊正被IMAP抓获,但身体中没有任何其他东西被显示出来。有没有其他方法可以从gmail或任何其他可以将内容显示到网页的网站上阅读电子邮件?

我放弃了让IMAP阅读它,因为没有人能够找出问题...我已经花了好几个小时所以我放弃但这里是代码......

<?php
    /* connect to gmail */
    $hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
    $username = 'username@gmail.com';
    $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);

?>

4 个答案:

答案 0 :(得分:3)

除了DmitryK建议的内容外,

添加以下内容使得一切正常,没有随机的“=”符号。 Str_replace用于删除页面上生成的“=”。

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

我不知道100%为什么随机生成“=”,但这很可能是由于Exchange Server的一些加密问题,因为我们的服务器大约有10年了。

答案 1 :(得分:2)

您正在处理多部分消息(查看您的pastebin电子邮件示例)。 作为测试尝试使用此行:

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

纯文本版本低于1.1 HTML版本是1.2 签名位于下一部分 - 它是2.这是您在代码示例中检索的内容。

答案 2 :(得分: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();

答案 3 :(得分:-1)

Gmail有一些不同的IMAP设置,请更密切地遵循原始代码:

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