Erro no script do procmail para usar o formato Maildir

2

Eu tenho este código em / etc / procmailrc:

DROPPRIVS=yes

DEFAULT=$HOME/Maildir/

:0
* ? /usr/bin/test -d $DEFAULT || /bin/mkdir $DEFAULT
{ }
:0 E
{
        # Bail out if directory could not be created
        EXITCODE=127
        HOST=bail.out
}

MAILDIR=$HOME/Maildir/

Mas, quando o diretório já existir, às vezes ele enviará um email de retorno com este erro: 554 5.3.0 unknown mailer error 127 . O e-mail ainda é entregue, lembre-se, mas ele envia de volta um código de erro para o usuário que enviou também.

Corrigi isso temporariamente comentando as linhas EXITCODE e HOST , mas gostaria de saber se existe uma solução melhor.

Eu encontrei este bloco de código em vários lugares na rede, mas não consegui encontrar porque esse erro estava voltando para mim. Parece acontecer quando eu envio um email para um usuário local. Às vezes, o usuário tem um arquivo .forward para enviá-lo para outros usuários, às vezes não, mas o resultado é o mesmo. Eu também tentei remover DROPPRIVS , apenas no caso de estar atrapalhando o encaminhamento, mas isso não pareceu afetá-lo.

  • A linha que começa com * ? /usr/bin/test é um problema?
  • O * significa um regex, mas o ? faz com que ele retorne um valor inteiro, correto?
  • Qual é o número inteiro sendo comparado? Ou é apenas comparando o valor de retorno inteiro?
  • Preciso de um espaço entre os dois blocos?

Obrigado pela ajuda.

    
por bradlis7 18.03.2010 / 14:55

2 respostas

0

Na verdade, as instruções dovecot para o procmail são o que eu estava procurando.

# file: /etc/procmailrc
# system-wide settings for procmail
SHELL="/bin/bash"
SENDMAIL="/usr/sbin/sendmail -oi -t"
LOGFILE="/var/log/procmail.log"
DROPPRIVS="yes"
DELIVER="/usr/lib/dovecot/deliver"
# fallback:
DEFAULT="$HOME/Maildir/"
MAILDIR="$HOME/Maildir/"
:0 w
* ^X-Spam-Status: Yes
| $DELIVER -m spam
:0 w
| $DELIVER

Obrigado pela ajuda.

    
por 12.05.2010 / 18:25
1

Eu apostaria em algum tipo de condição de corrida. Importa se você encerrar a linha / usr / bin / test em um pequeno script de shell? como:

* ? /usr/local/bin/make-sure-exists-dir $DEFAULT

com um diretório "make-sure-exists-dir" que faz:

/usr/bin/test -d "$1" || mkdir "$1"

também, ao olhar para o manpage para mkdir, -p não há erro na existência, então você poderia apenas fazer:

* ? mkdir -p $DEFAULT
    
por 02.05.2010 / 07:04