PHP Imap 获取消息正文

问题描述 投票:0回答:2

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

$mailbox = new PhpImap\Mailbox(
    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():错误的消息编号

有人知道发生了什么事吗?

php laravel imap
2个回答
0
投票

您必须使用

$mail
对象而不是
$mailbox
对象获取主体。

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

0
投票

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

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

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

无论如何,如果您打算使用 imap_* 库,我建议您使用这个包装器:php-taniguchi(它有很好的文档记录,并且有一个示例file)。

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

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

$tmp = new \Taniguchi\Imap($account, $password, $url, $port); $tmp->setSsl()->setValidate(false); var_dump($tmp->read(1, 2, true, true, true));
    
© www.soinside.com 2019 - 2024. All rights reserved.