我正在连接到邮箱并获取每条消息的标题信息,如下所示:
$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));