Search code examples
phpimap

PHP: IMAP move email to trash


I'm trying to move the email from Inbox to trash box and wrote the following code that always gives error Error in IMAP command COPY: Invalid messageset (0.000 + 0.000 secs).

$stream = imap_open($hostname, $username, $password) or die('Cannot connect to mail: ' . imap_last_error());

if(imap_mail_move($stream, '4', 'INBOX.Trash') or die(imap_last_error())) {
    echo '1';
}
else {
    echo 'error';
}

here is the different variations that I tried with

imap_mail_move($stream, '4', 'Trash')
imap_mail_move($stream,  4 , 'Trash')
imap_mail_move($stream, '4', 'INBOX/Trash')
imap_mail_move($stream,  4 , 'INBOX/Trash')

Solution

  • For example it may contain national version of that name. Also some Gmail accounts use "[Gmail]/Bin" in English version. You should use CommonFolders class to recognize folders:

    $server = '{imap.gmail.com:993/ssl}';
    $connection = imap_open($server, 'user_name@gmail.com', 'password');
    $mailboxes = imap_list($connection, $server, '*');
    var_dump($mailboxes);
    

    In Brazilian Portuguese you can see something like:

    0 => string '{imap.gmail.com:993/ssl}INBOX' (length=29)
    1 => string '{imap.gmail.com:993/ssl}[Gmail]/Com estrela' (length=43)
    2 => string '{imap.gmail.com:993/ssl}[Gmail]/E-mails enviados' (length=48)
    3 => string '{imap.gmail.com:993/ssl}[Gmail]/Importante' (length=42)
    4 => string '{imap.gmail.com:993/ssl}[Gmail]/Lixeira' (length=39)
    5 => string '{imap.gmail.com:993/ssl}[Gmail]/Rascunhos' (length=41)
    6 => string '{imap.gmail.com:993/ssl}[Gmail]/Spam' (length=36)
    7 => string '{imap.gmail.com:993/ssl}[Gmail]/Todos os e-mails' (length=48)
    

    So, my trash in brazilian portuguese is: '[Gmail]/Lixeira'

    You need to change your code to your trash.

    imap_mail_move($stream,  4 , '[Gmail]/Lixeira');
    

    Credits: http://www.electrictoolbox.com/open-mailbox-other-than-inbox-php-imap/