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

问题描述:

我需要将所有邮件从未看到的邮件移到垃圾箱(然后从收件箱中删除)。perl imap将邮件移动到垃圾箱(Mail :: IMAPClient)

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

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

此代码完全删除邮件。 (没有抹去太)

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

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

但“移动”创建新的标记(文件夹),“拷贝”不工作“无法复制:6 NO [TRYCREATE]没有文件夹垃圾桶(失败)“ 我试图使用名称:/垃圾桶,[imap]垃圾桶等,类似的结果。 这必须适用于不同的邮件服务!

我使用Mail::IMAPClient

+1

您使用哪种imap软件包? [不要坚持不必要的猜测] – AnFi 2014-10-01 10:23:50

+0

哦,我忘了写 Mail :: IMAPClient – user3751471 2014-10-01 10:37:34

+0

你可以看到哪些文件夹? '我的$文件夹= $ imap->文件夹或死“列表文件夹错误:”,$ imap-> LastError,“\ n”;打印“文件夹:@ $ folders \ n”;' – AnFi 2014-10-01 10:43:55

尝试下面的代码IMAP服务器支撑RFC6154like Gmail。它应该检测垃圾邮件文件夹名称。

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)) { 
    ... 
} 
+0

是的!它适用于我的英语,乌克兰语和俄语。 (我改变这个推(@Trash,$ fhash - > {name});) 非常感谢! – user3751471 2014-10-01 11:57:18

+0

已完成修复。在测试之后,我一直勇于/愚蠢地修改代码。无论如何,你应该把它当作一个工作原型。 – AnFi 2014-10-01 12:09:26

+0

我发现邮件服务谁垃圾文件夹为TRASH。我很抱歉,但如何在正则表达式中添加“TRASH”? – user3751471 2014-10-01 12:32:01