perl imap将邮件移至垃圾箱(Mail :: IMAPClient)

时间:2014-10-01 09:51:27

标签: perl email imap

我需要将所有邮件从看不见的邮件移到垃圾箱(然后从收件箱中删除)。

my $inbox = $imap->select("Inbox");
my @mails = ( $imap->unseen );

foreach my $msgid (@mails) {
    $imap->set_flag( "Deleted", @mails )
        or die "Could not set flag: $@\n";
}

此代码完全删除邮件。 (也没有删除)

我尝试使用“移动”和“复制”:

my $Trash = "Trash";
my $newUid = $imap->move( $Trash, $msgid )
    or die "Could not move: $@\n";
my $uidList = $imap->copy( $Trash, @mails )
    or die "Could not copy: $@\n";

但是“移动”创建新标记(文​​件夹)并且“复制”不起作用“无法复制:6无[TRYCREATE]无文件夹垃圾(失败)” 我试着用名字:/ Trash,[imap] Trash等,结果相似。 这必须适用于不同的邮件服务!

我使用Mail::IMAPClient

1 个答案:

答案 0 :(得分:4)

尝试支持RFC6154 like Gmail的imap服务器的以下代码。它应该检测垃圾文件夹名称。

use  Mail::IMAPClient; 
 ......
my $Trash;
{
  my @Trash;
  my @fhashes = $imap->folders_hash or die "Could not get list of folder hashes.\n";
  foreach my $fhash (@fhashes) {
    next unless map { /^\\Trash$/ ? ($_) : () } @{$fhash->{attrs}};
    push (@Trash, $fhash->{name});
  }
  $Trash = pop( @Trash) if @Trash == 1;
}
if( defined( $Trash)) {
   ...
}