Как переместить сообщение из Gmail Inbox на ярлык? - PullRequest
7 голосов
/ 26 ноября 2011

Я пытаюсь переместить сообщения из папки «Входящие» в метку «Обработано» с помощью этого кода:

$inbox = imap_open($host,$user,$pass) or die('Error: ' . imap_last_error());

if( $emails = imap_search($inbox,'ALL') )
{
    foreach($emails as $email_number) {
        imap_mail_move($inbox, $email_number, 'Processed') or die('Error');
    }

}
imap_expunge($inbox);
imap_close($inbox);

К сожалению, хотя сообщения и получают метку Обработано, они все еще остаются в папке «Входящие».

Как мне заставить их уйти из папки "Входящие"?

Ответы [ 5 ]

9 голосов
/ 06 декабря 2011

На самом деле ... Причина, по которой электронные письма были оставлены во входящей почте, заключалась в том, что когда imap_mail_move делал это, идентификаторы всех оставшихся сообщений уменьшались на единицу, поэтому, когда цикл foreach перемещался к следующему сообщению, одно сообщение был оставлен позади. Этот пропуск сообщения повторяется для каждой итерации. Вот почему казалось, что imap_mail_move не работает.

Решение состоит в том, чтобы использовать уникальные идентификаторы сообщений вместо потенциально повторяющихся идентификаторов:

$inbox  = imap_open( $host, $user, $pass );
$emails = imap_search( $inbox, 'ALL', SE_UID );

if( $emails ) {
    foreach( $emails as $email_uid ) {
        imap_mail_move($inbox, $email_uid, 'processed', CP_UID);
    }
}
3 голосов
/ 01 декабря 2011

Вы должны переместить сообщение в папку «[Gmail] / Вся почта», после того как вы «переместите его» в папку тегов, которая на самом деле не является папкой, как это видит Gmail, просто давая Gmail знать, чтобы добавить этот тег.

То есть через IMAP:

1) Когда сообщение перемещается в папку «[Gmail] / TAG», оно говорит Gmail добавить «TAG» к сообщению, но не делаетлюбое перемещение сообщения.

2) Когда сообщение перемещается в папку «[Gmail] / Вся почта», оно сообщает Gmail удалить его из папки «Входящие».

1 голос
/ 03 мая 2012

@ Хенно, ваш диагноз верен, но вы могли просто отсортировать письма в порядке убывания.

$inbox = imap_open($host,$user,$pass) or die('Error: ' . imap_last_error());

if( $emails = imap_search($inbox,'ALL') )
{
    arsort($emails); //JUST DO ARSORT
    foreach($emails as $email_number) {
        imap_mail_move($inbox, $email_number, 'Processed') or die('Error');
    }

}
imap_expunge($inbox);
imap_close($inbox);
0 голосов
/ 09 мая 2017

используйте imap_expunge() или imap_close (..., CL_EXPUNGE);, но проверьте возвращаемое значение, если true или false, если используете imap_close (..., CL_EXPUNGE);

0 голосов
/ 12 февраля 2014

Поместите это в конец вашего файла, после того как вы обработаете все электронные письма, они будут перемещены в папку «Входящие» и перемещены в папку с именем «done».

$mbox   = imap_open('{imap.gmail.com:993/imap/ssl}INBOX', 'emailaddress@gmail.com', 'password');
$countnum = imap_num_msg($mbox);
if($countnum > 0) {
//move the email to our saved folder
$imapresult=imap_mail_move($mbox,'1:'.$countnum,'done');
if($imapresult==false){die(imap_last_error());}
imap_close($mbox,CL_EXPUNGE);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...