2014-10-01 2 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] 휴지통 등 유사한 결과를 사용하려고했습니다. 다른 메일 서비스에서 작동해야합니다!

은 내가

+1

어떤 imap 패키지를 사용하십니까? [불필요한 추측을 고집하지 마십시오] – AnFi

+0

아, 글을 쓰는 걸 잊었습니다. Mail :: IMAPClient – user3751471

+0

어떤 폴더를 볼 수 있습니까? 'my $ folders = $ imap-> folders or die "목록 폴더 오류 :", $ imap-> LastError, "\ n"; "Folders : @ $ folders \ n"; ' – AnFi

답변

4

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

예! 영어, 우크라이나어 및 러시아어로 저에게 맞는 작품입니다. (이 푸시를 변경합니다 (@ 트러시, $ fhash -> {name});) 대단히 감사합니다! – user3751471

+0

버그 수정 완료. 나는 테스트 후에 코드를 수정하기 위해 용감하고 바보 같았다. 어쨌든 작동하는 프로토 타입으로 간주해야합니다. – AnFi

+0

휴지통 폴더가 휴지통 인 메일 서비스를 찾았습니다. 미안하지만 정규 표현식에 "TRASH"를 추가하는 방법은 무엇입니까? – user3751471