2014-10-01 102 views
3

我需要將所有郵件從未看到的郵件移到垃圾箱(然後從收件箱中刪除)。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

回答

4

嘗試下面的代碼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

相關問題