Como copiar mensagens entre dois servidores IMAP e ignorar mensagens que já existem na caixa de correio de destino?
Estou tentando implementar a cópia usando imapfilter , mas o problema é que a cada execução recebo um número de duplicatas - isso acontece quando um filtro é baseado em todas as mensagens, mas quando uso filtro invisível. / p>
O que estou tentando alcançar:
Eu tenho o seguinte script config.lua.
---------------
-- Options --
---------------
options.timeout = 120
options.subscribe = true
options.create = true
options.charset = 'UTF-8'
target_folder = 'MailArchive/'
source1 = IMAP {
server = 'imap.mail.org',
username = '[email protected]',
password = password1,
ssl = 'tls1.3',
}
source2 = IMAP {
server = 'imap.mail.com',
username = '[email protected]',
password = password2,
ssl = 'tls1.3',
}
target = IMAP {
server = 'localhost',
username = 'user',
password = password3,
port = 143,
}
----------------------
-- Backup procedure --
----------------------
sources = { source1, source2 }
local function copy_imap_folder(_src_acc, _src_box, _trg_acc, _trg_box)
if string.upper(_src_box) ~= 'TRASH'
and string.upper(_src_box) ~= 'SPAM'
and string.upper(_src_box) ~= 'JUNK'
and string.upper(_src_box) ~= 'INFECTED ITEMS' then
print('Processing mailbox: ' .. _src_box)
print('Copying to folder: ' .. _trg_box)
-- local newemails = _src_acc[_src_box]:is_unseen() -- not used
local newemails = _src_acc[_src_box]:select_all()
newemails:copy_messages(_trg_acc[_trg_box])
newemails = _trg_acc[_trg_box]:is_unseen()
newemails:mark_seen()
end
end
for _, src in ipairs(sources) do
print('Processing account: ' .. src._account.username .. '@' .. src._account.server)
mailboxes, folders = src:list_all()
for _, mbox in ipairs(mailboxes) do
targetmailbox = target_folder .. mbox
copy_imap_folder(src, mbox, target, targetmailbox)
end
end
Chegando ao ponto, minhas perguntas são as seguintes
Como copiar sem duplicatas - deve primeiro ler message_id da origem, depois do destino, fazer uma diferença de conjunto e copiar apenas as mensagens não existentes? Existe alguma função fora da caixa para isso ou eu deveria implementar tudo isso sozinho em lua?
Por que recebo duplicatas ao usar o filtro all_message, mas não quando o filtro un_seen é usado? Isso tem a ver com o número de mensagens? Ou e-mails não lidos são tratados de forma diferente?
Atenciosamente, Sebastian