0

背景

我正在运行以下代码来使用IMAP PHP 扩展检索电子邮件:

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

    $inbox = imap_open($hostname,$username,$password);

    $emails = imap_search($inbox,'ALL');

    if ($emails) {
        foreach($emails as $emailNumber) {
            $overview = imap_fetch_overview($inbox,$emailNumber,0);
            $message = imap_fetchbody($inbox,$emailNumber,"1");

            echo $overview[0]->from;
            echo $message;

        }
    }
    imap_close($inbox);
?>

问题

imap_fetchbody() section参数设置为1,我会收到完整的电子邮件,包括标题和 HTML。http://pastebin.com/np84rG7r

但是,当将参数更改为1.2以将消息标识为 HTML 时,它不会返回任何内容。

为什么会这样?

更新

我已经制作了一小段代码来手动完成工作,直到我找出它不起作用的原因:

$message = imap_fetchbody($inbox,$emailNumber,"1.1.1");
$doc = new DOMDocument();
$doc->loadHTML($message);
$message = trim($doc->getElementsByTagName("td")->item(0)->nodeValue);
4

1 回答 1

0

不幸imap_fetchbody的是,部件号取决于您的邮件是否有 html,以及是否有任何附件。当您有纯文本邮件时,您需要使用1而不是1.2.

要阅读完整的悲剧,我推荐https://www.php.net/manual/en/function.imap-fetchbody.php#89002

确保您始终获得正文内容的一种俗气的方法实际上是

$message = imap_fetchbody($inbox,$emailNumber,1.2);
if(empty($bodyText)){
    $message = imap_fetchbody($inbox,$emailNumber,1);
}
于 2019-08-30T14:55:49.460 回答