Como lidar com duplicatas de e-mail durante a cópia de mensagens usando o Imapfilter

0

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:

  1. O (s) servidor (es) de origem é o servidor de produção que uso para e-mails diários, etc.
  2. O servidor de destino é um servidor de backup que deve armazenar todos os emails
  3. A suposição é que, se uma mensagem foi excluída no servidor de origem, ela ainda será mantida no destino.
  4. Eu quero que o trabalho do imapfilter seja executado todos os dias, talvez com frequência (planejado como trabalho antigo)
  5. A seleção incremental de mensagens com base no filtro un_seen é uma opção, mas quando um email é marcado como lido antes do trabalho de backup chegar, então essa mensagem não será copiada - acho que todas as mensagens devem ser analisadas

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

  1. 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?

  2. 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

    
por Sebastian Widz 30.05.2018 / 10:25

0 respostas