Limite dinamicamente o tamanho do anexo postfix

3

Para um projeto no qual estou trabalhando atualmente, recebemos um requisito para um limite de tamanho de anexo de e-mail "dinâmico". Para o postfix (que atualmente usamos), isso seria facilmente implementado usando a opção de configuração message_size_limit . Isso, no entanto, impede que o usuário envie um email com um anexo. Nosso caso de uso exige dois limites diferentes. Em algumas situações, um limite inferior é aplicado, mas isso deve ser transparente para os usuários. Eles ainda devem enviar um e-mail com um anexo com tamanho menor que o limite máximo.

Portanto, gostaríamos de evitar um email de rejeição "muito grande para a mensagem", mas em vez disso, enfileiraremos a mensagem para tentar novamente a entrega mais tarde. Assim, quando o limite de tamanho dos anexos for aumentado novamente, o e-mail continuará sendo entregue ao destinatário.

Antecedentes

Precisamos dessa capacidade para vasos que às vezes podem ser conectados a um uplink de satélite lento e, outras vezes, conectados a um uplink de alta velocidade. Para os anexos grandes de conexão de alta velocidade (< 20MB) não são um grande problema, mas para uma conexão de satélite de largura de banda muito baixa isso se torna um problema, por isso queremos limitar o tamanho do anexo. No entanto, isso não deve ficar visível para o usuário, pois ele não tem conhecimento sobre o tipo de uplink atual.

    
por marabunta2048 02.09.2015 / 10:29

1 resposta

4

Aqui eu suponho que você tenha um mecanismo de monitoramento do status de uplink do seu servidor. Você precisa executar um script descrito abaixo quando o uplink for alterado.

Postfix apenas verifica o tamanho da mensagem antes de enfileirar a mensagem. A ação foi 200 accept ou 5XX reject . Não há nenhuma ação personalizada como "Ei postfix, por favor, segure esta grande mensagem até estarmos conectados ao uplink de alta velocidade".

Então, precisamos de companhia aqui. Você pode usar o postfwd para verificar o tamanho da mensagem para você. Quando sua mensagem exceder o limite de postfwd, você poderá definir uma ação personalizada, como a ação HOLD . De acordo com acesso man 5 , quando a ação HOLD é aplicada a uma mensagem, então

HOLD optional text...

Place the message on the hold queue, where it will sit until someone either deletes it or releases it for delivery. Log the optional text if specified, otherwise log a generic message.

Então, aqui está a ideia:

  • Quando estiver conectado ao uplink lento , coloque o limite inferior no postfwd. Quando uma mensagem de envio do usuário exceder o limite inferior, o postfix irá HOLD. Ele permanece na fila e o postfix não se incomodará em entregá-lo.
  • Quando você estiver conectado ao uplink de alta velocidade , o script colocará o limite mais alto em postfwd. Em seguida, o script deve emitir o comando postsuper como root para liberar o email da fila HOLD.

    postsuper -H ALL
    

    Note que, neste caso, o limite de postfwd deve ser maior que message_size_limit no postfix. Caso contrário, o postfix não rejeitará mensagens grandes, mas mantenha-as.

  • Quando você está conectado ao uplink lento novamente , coloque o limite inferior em postfwd.

A regra de exemplo do postfwd é

# replace 192.168.1.0/24 with your local network and 12345 with limit size
id=RULE001
    client_address=192.168.1.0/24
    size=12345
    action=HOLD exceed slow link limit

Por favor, consulte os documentos postfwd sobre a instalação e seu regras . Esta resposta não cobre isso.

    
por 02.09.2015 / 16:15