Configurando o procmail para ignorar respondedores automáticos e rejeições

4

Estou usando o procmail para receber mensagens de e-mail e encaminhá-las para um script para manipulação. Às vezes, isso também significa gerar um email (por exemplo, encaminhando a mensagem para outro usuário ou respondendo a uma consulta).

É desnecessário dizer que não tenho interesse em carregar meu servidor com e-mails de autoresponders ou respostas de férias, por isso estou pensando se existe uma maneira fácil de filtrar essas mensagens. Eu estou canalizando isso para um script de qualquer maneira, então eu sempre posso criar meu próprio filtro no script, mas prefiro não reinventar a roda.

Eu já sei que devo lixeira de mensagens com Precedence: junk ou Precedence: bulk . Posso apenas filtrá-los como você faria com qualquer outro cabeçalho no procmail?

    
por Jordan Reiter 22.06.2011 / 05:09

2 respostas

6

Ler os documentos seria um bom começo. Há um mini-howto aqui que aborda o básico. As mensagens geradas automaticamente devem ser coletadas pelas regras FROM_DAEMON e FROM_MAILER. Também use o X-Loop (descrito no documento acima) para evitar mensagens em loop.

Por fim, você pode suprimir respostas repetidas para o mesmo endereço conforme demonstrado aqui (para os fins de uma resposta automática de férias). Assim, mesmo que o sistema remoto não funcione bem e preencha corretamente o endereço de saída e retire o cabeçalho do X-Loop, você pode interromper o ciclo.

O Procmail pode ser usado para criar sistemas muito sofisticados - é uma linguagem de programação por si só. Você também pode querer dar uma olhada:

Atualizar

Desde que o www.clarconnect.com caiu da internet, busquei o conteúdo da máquina de retorno:

Visão geral

Eu sei que nem todo mundo aprova respostas automáticas de férias por e-mail, mas o fato é que alguns de nossos clientes / usuários insistem nisso. Então, aqui está uma maneira de configurar um sistema no qual os usuários podem administrar suas próprias mensagens de resposta automática de férias.

Recursos desta receita de resposta automática de férias do procmail:

  • Resposta automática gerenciada pelo usuário - o usuário pode ativar / desativar a resposta automática e o usuário pode definir uma mensagem de resposta diferente todas as vezes.
  • Uma resposta automática é enviada apenas uma vez para um endereço de e-mail toda vez que a resposta automática é ativada. Conseqüentemente, loops de resposta automática são evitados e, se uma pessoa (ou lista de discussão) enviar vários e-mails para o endereço enquanto a resposta automática estiver ativada, o remetente não será incomodado por várias respostas de resposta automática.
  • Receita tenta evitar responder a listas de distribuição e spam. Instalar e configurar o Procmail

Antes de continuar, você precisará ter o procmail ativado em seu sistema. Para obter instruções, vá para o seguinte guia: Filtrando e-mail com o Procmail

Tome nota especial da seção intitulada "Ativar o Procmail no Postfix".

Como configurar a resposta automática de férias

Para ativar a resposta automática de férias para seus usuários, você precisará criar um arquivo .procmailrc na pasta / home / "username" para cada usuário que precisar desse serviço. O arquivo precisará conter o código abaixo.

# Uncomment the lines below if you need log output for testing.
#
#LOGFILE=/tmp/procmailvacation.log
#VERBOSE=on

# vim: ft=procmail

# User-managed vacation recipe for procmail
# Written by Jason Thaxter
#  (http://www.google.com/search?q=jason+thaxter)

#   * Include this file in the procmail file.
#   * Set $VACATION_PASSWORD. (for security, this is mandatory)
#   * Define $VACATION_SENDER in your procmail recipe: it will be "from" this
#     address.
#   * E-mail a message with $VACATION_PASSWORD and $VACATION_ON in the subject
#     line. The body of the message becomes the vacation message. $VACATION_ON
#     can be set prior to the INCLUDERC, but it defaults to "vacation on".
#   * To turn it off, e-mail a message with $VACATION_PASSWORD and $VACATION_OFF
#     in the subject line. Likewise, $VACATION_OFF defaults to "vacation off".

# Note that you probably want this to execute *after* any mailing list or spam
# delivery recipes. You can set $VACATION_SKIP to disable vacation processing
# if it's inconvenient to skip this recipe.

# -----------------------------------------------------------------------------
# Configurable variables: These variables allow you to use this vacation recipe
# as an include and customize it from your main procmail file.
#
# lockfile:
VACATION_LOCK=$HOME/${VACATION_LOCK:-".vacation$LOCKEXT"}
# cache file:
VACATION_CACHE=$HOME/${VACATION_CACHE:-".vacation_cache"}
# cache size:
VACATION_CACHE_SZ=${VACATION_CACHE_SZ:-8192}
# message file
VACATION_MSG=$HOME/${VACATION_MSG:-".vacation_mesg"}
# what to use as the xloop header
HOSTNAME=${HOSTNAME:-'hostname'}
VACATION_XLOOP=${VACATION_XLOOP:-"$LOGNAME@$HOSTNAME"}
# base token for default $VACATION_ON and $VACATION_OFF
# so you could set this and not those individually
VACATION_COOKIE=${VACATION_COOKIE:-"vacation"}
VACATION_ON=${VACATION_ON:-"$VACATION_COOKIE on"}
VACATION_OFF=${VACATION_OFF:-"$VACATION_COOKIE off"}

#
#Change these variables
#
VACATION_PASSWORD=yourpassword
VACATION_DOMAIN_NAME=domainname.com

VACATION_SENDER=$LOGNAME@$VACATION_DOMAIN_NAME
VACATION_SENDMAILFROM=${VACATION_SENDMAILFROM:-"-f$VACATION_SENDER"}
VACATION_SENDMAILFLAGS="-oi -t $VACATION_SENDMAILFROM"
# -----------------------------------------------------------------------------

SENDMAIL_CMD="$SENDMAIL $VACATION_SENDMAILFLAGS"
SHELL=/bin/sh

# check if we should send vacation message, add user to cache
:0 Whc: $VACATION_LOCK
# if i haven't been instructed to skip processing
* ? test -z $VACATION_SKIP
# if i have a vacation message file
* ? test -f $VACATION_MSG
# and the message is not from a daemon or mailer
* !^FROM_DAEMON
* !^FROM_MAILER
# not declared spam by spamassassin
* !^X-Spam-Flag: YES
# not discernably in a mailing list
* !^List-
* !^(Mailing-List|Approved-By|BestServHost|Resent-(Message-ID|Sender)):
* !^X-[^:]*-List:
* !^X-(Sent-To|(Listprocessor|Mailman)-Version):
# and not x-loop
* !^X-Loop: $VACATION_XLOOP
# add it to the cache
| formail -rD $VACATION_CACHE_SZ $VACATION_CACHE

:0 ehc
# if the name was not in the cache
# if we can find who we're sending it to
# and who we are sending this "From"
* ? test -n ${VACATION_MSG_SEND_TO}
* ? test -n ${VACATION_SENDER}
*$ !^From:.*$VACATION_SENDER
| (formail -r \
   -I"Precedence: junk" \
   -A"From: $VACATION_SENDER" \
   -A"X-Loop: $VACATION_XLOOP"; \
   cat  $VACATION_MSG ) | \
   $SENDMAIL_CMD

# Add/remove vacation message
:0
# First make sure that the sender has 
# the correct username
* ^TO_\/[-\.a-z_]+@
*$ ^From:.*$\MATCH
# the correct email domain
*$ ^From:.*$\VACATION_DOMAIN_NAME
# only do this if we have a password set
* ? test -n $VACATION_PASSWORD
# and it's in the subject line
* $^Subject:.*${VACATION_PASSWORD}
{

    # VACATION ON
    # if subject line matches magic cookie for ON:
    :0
    * $^Subject:.*${VACATION_ON}
    {
       # pipe the body into the vacation message file
       :0c:$VACATION_LOCK
       | formail -I "" > $VACATION_MSG

       # add message to the body
       :0f
       | cat - ; \
       echo; \
       echo '---------- VACATION -----------------'; \
       echo 'The above text was installed as your vacation message'
    }

    # VACATION OFF
    # if subject line matches magic cookie for OFF:
    # delete the vacation file and notify
    :0f
    * $^Subject:.*${VACATION_OFF}
      | cat -;  \
      echo '---------- VACATION -----------------'; \
      echo 'Removing message and cache: '; \
      rm -vf $VACATION_MSG; \
      rm -vf $VACATION_CACHE; \
      echo ; \
      echo "Removed vacation message."

 }

Depois de criar o arquivo, certifique-se de alterar as seguintes linhas:

  • $ VACATION_PASSWORD - isso impede que outras pessoas ativem / desativem a resposta automática de suas férias.
  • $ VACATION_DOMAIN_NAME - este é o nome de domínio usado para seus e-mails (por exemplo, usuário@domínio.com).

Agora você vai querer ter certeza de que o arquivo .procmailrc tem as seguintes permissões de segurança:

O usuário e o grupo devem ser definidos com o nome de usuário do usuário de e-mail para o qual você está configurando.

Permissões de arquivo devem ser definidas como rwx ------ apenas para o usuário (ou seja, 0700).

** Atenção! **

Observe que, se você definir as permissões para .procmailrc para o usuário errado ou definir as permissões para que usuário, grupo e outras pessoas possam ler / gravar / executar .procmailrc, o procmail ignorará seu arquivo .procmailrc.

Quando essas configurações estiverem definidas, a resposta automática deverá funcionar. Se você tiver problemas com a resposta automática, você pode remover o comentário das duas linhas seguintes e verificar o conteúdo de /tmp/procmailvacation.log.

#LOGFILE=/tmp/procmailvacation.log
#VERBOSE=on

Usando a resposta automática de férias

Agora que a receita está instalada, os usuários podem ativar a resposta automática de férias, enviando a si mesmos um e-mail com o seguinte assunto:

  • férias com senha em - em que senha é a senha configurada no script.

O corpo deste e-mail se tornará a mensagem de e-mail de resposta automática. O usuário receberá o e-mail que o usuário acabou de enviar para si mesmo com o seguinte texto anexado ao final:

---------- VACATION -----------------

The above text was installed as your vacation message

Para desativar a resposta automática de férias, os usuários enviam para si mesmos um email com o assunto

  • férias de senha desativadas - em que senha é a senha configurada no script.

O usuário receberá o e-mail que o usuário acabou de enviar para si mesmo com o seguinte texto anexado ao final:

---------- VACATION -----------------

Removing message and cache: 
removed '/home/[username]/.vacation_mesg'
removed '/home/[username]/.vacation_cache'

Removed vacation message.
    
por 22.06.2011 / 13:54
2

Bem, se o assunto contiver uma resposta padrão, você poderá filtrar tudo com "Fora do escritório" (ou similar) para /dev/null .

:0
* 'Out Of Office'
/dev/null
    
por 22.06.2011 / 05:53