如何在 php-imap 上限制结果
How to limit result on php-imap
我正在使用 php-imap-client 从 php-imap 获取我的邮件,脚本工作没有问题,但我想限制从服务器获取的邮件数量。
这是脚本:
<?PHP
require_once "Imap.php";
$mailbox = 'imap-mail.outlook.com';
$username = 'MYEMAIL@outlook.it';
$password = 'MYPASSWORD';
$encryption = 'ssl'; // or ssl or ''
// open connection
$imap = new Imap($mailbox, $username, $password, $encryption);
// stop on error
if($imap->isConnected()===false)
die($imap->getError());
// get all folders as array of strings
$folders = $imap->getFolders();
foreach($folders as $folder)
echo $folder;
// select folder Inbox
$imap->selectFolder('INBOX');
// count messages in current folder
$overallMessages = $imap->countMessages();
$unreadMessages = $imap->countUnreadMessages();
// fetch all messages in the current folder
$emails = $imap->getMessages($withbody = false);
var_dump($emails);
// add new folder for archive
$imap->addFolder('archive');
// move the first email to archive
$imap->moveMessage($emails[0]['id'], 'archive');
// delete second message
$imap->deleteMessage($emails[1]['id']);
我正在使用的脚本:https://github.com/SSilence/php-imap-client
我该怎么做?
查看描述,这些函数似乎没有办法限制收集的消息数量,因为它们使用的是消息的 ID,而不仅仅是一般计数。因此,您可能有不同的 ID 列表。以他们的示例转储为例,您有 ID 15 和 ID 14。列表中的下一个可能是 ID 10,因为用户可能删除了 13、12 和 11。
因此您可以收集初始列表,然后使用 $imap->getMessage($id);
对其进行迭代 它看起来像这样:
$overallMessages = $imap->countMessages();
$unreadMessages = $imap->countUnreadMessages();
$limitCount = 20;
$partialEmailIdList = array();
// fetch all messages in the current folder
$emails = $imap->getMessages($withbody = false);
if($limitCount < $overallMessages){
for($i=0; $i<$limitCount; $++){
// Populate array with IDs
$partialEmailIdList[] = $emails[$i]['id'];
}
} else {
foreach($emails as $email){
$partialEmailIdList[] = $email['id'];
}
}
foreach($partialEmailIdList as $mid){
$message = $imap->getMessage($mid);
// Do stuff...
}
我正在使用 php-imap-client 从 php-imap 获取我的邮件,脚本工作没有问题,但我想限制从服务器获取的邮件数量。
这是脚本:
<?PHP
require_once "Imap.php";
$mailbox = 'imap-mail.outlook.com';
$username = 'MYEMAIL@outlook.it';
$password = 'MYPASSWORD';
$encryption = 'ssl'; // or ssl or ''
// open connection
$imap = new Imap($mailbox, $username, $password, $encryption);
// stop on error
if($imap->isConnected()===false)
die($imap->getError());
// get all folders as array of strings
$folders = $imap->getFolders();
foreach($folders as $folder)
echo $folder;
// select folder Inbox
$imap->selectFolder('INBOX');
// count messages in current folder
$overallMessages = $imap->countMessages();
$unreadMessages = $imap->countUnreadMessages();
// fetch all messages in the current folder
$emails = $imap->getMessages($withbody = false);
var_dump($emails);
// add new folder for archive
$imap->addFolder('archive');
// move the first email to archive
$imap->moveMessage($emails[0]['id'], 'archive');
// delete second message
$imap->deleteMessage($emails[1]['id']);
我正在使用的脚本:https://github.com/SSilence/php-imap-client
我该怎么做?
查看描述,这些函数似乎没有办法限制收集的消息数量,因为它们使用的是消息的 ID,而不仅仅是一般计数。因此,您可能有不同的 ID 列表。以他们的示例转储为例,您有 ID 15 和 ID 14。列表中的下一个可能是 ID 10,因为用户可能删除了 13、12 和 11。
因此您可以收集初始列表,然后使用 $imap->getMessage($id);
对其进行迭代 它看起来像这样:
$overallMessages = $imap->countMessages();
$unreadMessages = $imap->countUnreadMessages();
$limitCount = 20;
$partialEmailIdList = array();
// fetch all messages in the current folder
$emails = $imap->getMessages($withbody = false);
if($limitCount < $overallMessages){
for($i=0; $i<$limitCount; $++){
// Populate array with IDs
$partialEmailIdList[] = $emails[$i]['id'];
}
} else {
foreach($emails as $email){
$partialEmailIdList[] = $email['id'];
}
}
foreach($partialEmailIdList as $mid){
$message = $imap->getMessage($mid);
// Do stuff...
}