PHP Imap获取消息正文



我正在连接到邮箱并获取每条消息的标题信息,如下所示:

$mailbox = new PhpImapMailbox(
env('MAIL_IMAP_PATH') . env('MAIL_FOLDER'), // IMAP server and mailbox folder
env('MAIL_LOGIN'), // Username for the before configured mailbox
env('MAIL_PASSWORD') // Password for the before configured username
);
$mailsIds = $mailbox->searchMailbox('ALL');
foreach($mailsIds as $mail_elem) {
$mail = $mailbox->getMail($mail_elem);
}

getMail给了我所有没有正文的标题信息。我已经检查了$mailbox->上存在的每一种方法,没有办法得到尸体。我哪里做错了?


第二种方法是使用imap_open()imap_fetchbody()的流。这感觉更像是一种变通方法,因为我第二次连接到邮箱,但它也不起作用:

foreach($mailsIds as $mail_elem) {
$imap_stream = imap_open(env('MAIL_IMAP_PATH') . env('MAIL_FOLDER'),
env('MAIL_LOGIN'), env('MAIL_PASSWORD'));
$message = imap_fetchbody($imap_stream, $mail_elem, 1.1);
}

我得到一个错误:

imap_fetchbody(): Bad message number

有人知道是怎么回事吗?

您必须获得$mail对象的主体,而不是$mailbox对象。

foreach($mailsIds as $mail_elem) {
$mail = $mailbox->getMail($mail_elem);
$message = $mail->textHtml;
}

这不是原因,但fetchbody的第三个参数是字符串,而不是浮点数,所以写为:

imap_fetchbody($imap_stream, $mail_elem, '1.1')

您的问题可能是关于$mail_elem,这可能与imap的索引不匹配。如果它们是UID,则需要添加标志FT_UID的第四个参数imap_fetchbody.

无论如何,如果你打算使用imap_*库,我建议你使用这个包装器:php-taniguchi(它是相当有文档的,它有一个示例文件)。

read ()方法很简单:read(int $from, int $number, bool $details = false, bool $seen = false, bool $attachments = false)

设置all为true,你会得到你想要的一切,这很简单:

$tmp = new TaniguchiImap($account, $password, $url, $port);
$tmp->setSsl()->setValidate(false);
var_dump($tmp->read(1, 2, true, true, true));

最新更新