我需要将所有邮件从看不见的邮件移到垃圾箱(然后从收件箱中删除)。
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等,结果相似。 这必须适用于不同的邮件服务!
答案 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)) {
...
}