Pergunta

(usando os comandos IMAP, não com a ajuda de qualquer outro pacote mail)

Foi útil?

Solução

Eu não sei o quão bem versado você está em imap-falar, mas basicamente após o login, "SELECT" a caixa de correio de origem, "COPY" as mensagens, e "EXPUNGE" as mensagens (ou "DELETE" o velho caixa de correio se ele está vazio agora: -).

a login a s
b select source
c copy 1 othermbox
d store 1 +flags (\Deleted)
e expunge

seria um exemplo de mensagens a serem enviadas. ( Nota : mensagens IMAP exigem um prefixo uniqe antes de cada comando, assim, a "a b c" na frente)

RFC 2060 para mais detalhes.

Outras dicas

Existem várias maneiras de fazer isso. O melhor é o comando UID MOVE definido na RFC 6851 desde o início de 2013:

C: a UID MOVE 42:69 foo
S: * OK [COPYUID 432432 42:69 1202:1229]
S: * 22 EXPUNGE
S: (more expunges)
S: a OK Done

Presença desta extensão é indicada pela capacidade MOVE.

Se não está disponível, mas UIDPLUS ( RFC 4315 ) é, a segunda melhor opção é usar o combinação de UID STORE, UID COPY e UID EXPUNGE:

C: a01 UID COPY 42:69 foo
S: a01 OK [COPYUID 432432 42:69 1202:1229] Copied
C: a02 UID STORE 42:69 +FLAGS.SILENT (\Deleted)
S: a02 OK Stored
C: a03 UID EXPUNGE 42:69
S: * 10 EXPUNGE
S: * 10 EXPUNGE
S: * 10 EXPUNGE
S: a03 Expunged

Se o UIDPLUS está faltando, não há nada razoável que você pode fazer - o comando EXPUNGE remove permanentemente todas as mensagens que são marcados para exclusão, incluindo aquelas que você não tenha tocado. O melhor é usar apenas o UID COPY e UID STORE nesse caso.

Se você tem o uid do e-mail que vai ser movido.

import imaplib

obj = imaplib.IMAP4_SSL('imap.gmail.com', 993)
obj.login('username', 'password')
obj.select(src_folder_name)
apply_lbl_msg = obj.uid('COPY', msg_uid, desti_folder_name)
if apply_lbl_msg[0] == 'OK':
    mov, data = obj.uid('STORE', msg_uid , '+FLAGS', '(\Deleted)')
    obj.expunge()

Onde msg_uid é o uid do correio.

Eu acho que você copiar a mensagem para a nova pasta e exclua (EXPUNGE)-lo no antigo.

RFC3501

Dica Não há nenhum comando DELETE que faz o que você quer dizer, você tem que sinalizar a mensagem como excluída e, em seguida, eliminar a caixa de correio. Ter um olhar para o RFC. Tenha cuidado com DELETE, como ele exclui caixas de correio inteiras, e-mails não individuais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top