Назад | Перейти на главную страницу

рецепт procmail для пересылки электронной почты отклонен получателем

Это первый раз, когда я использую procmail, и у меня есть следующий рецепт:

SENDMAIL=/opt/zimbra/postfix/sbin/sendmail
SHELL=/bin/sh
PATH=$HOME/bin:/usr/bin:/bin:.
MAILDIR=/opt/zimbra/procmail/
DEFAULT=$MAILDIR
LOGFILE=.procmaillog
LOCKFILE=.procmaillock
VERBOSE=yes

#Get the recipient's address
TO_=`formail -xTo: \
         | expand | sed -e 's/^[ ]*//g' -e 's/[ ]*$//g'`

#Get the recipient's local-part, e.g. fax number
FAXNO_=`echo "${TO_}" | awk -F@ '{ print $1 }'`


LOCALPART=${FAXNO_}
DOMAIN=faxservice.com

# Forward the email
:0
! ${LOCALPART}@${DOMAIN}

Рецепт получает заголовок электронной почты TO, анализирует его и создает адрес электронной почты для пересылки.

ПРОБЛЕМА

Проблема с рецептом заключается в том, что электронное письмо отклоняется получателем из-за изменения заголовка Return-Path.

ОПЫТНЫЕ РЕШЕНИЯ

  1. Я добавил следующее в начало рецепта,

    SENDMAILFLAGS = "- oi -f \" $ SENDER \ ""

    это делает заголовок Return-Path пустым, и получатель все равно отклоняет электронное письмо.

  2. я нашел этот serverfault вопрос и изменил мой рецепт следующим образом:

    # Forward the email
    :0
    * ^Return-Path:[   ]*\/[^  ].+
    { env=$MATCH }
    :0
    ! ${env+-f "$env"}
    ! ${LOCALPART}@${DOMAIN}
    

    Файл журнала procmail показывает ошибку, что нет совпадения,

    procmail: No match on "^Return-Path:[   ]*\/[^  ].+"
    

ВОПРОСЫ

Не знаю, нужно ли менять канал postfix,

   procmail-fax-send unix    -   n   n   -   -   pipe
   flags=    user=zimbra argv=/usr/bin/procmail  /opt/zimbra/procmail/procmailrc

Или как изменить мой рецепт, чтобы исходный отправитель не изменялся после обработки электронной почты procmail.

Не пытаясь решить часть вопроса, относящуюся к Postfix, вот попытка исправить проблемы Procmail и избавиться от множества внешних процессов, просто чтобы извлечь токен перед знаком @ в адресе To :.

# Do you really need to much with SENDMAIL?
SENDMAIL=/opt/zimbra/postfix/sbin/sendmail
SHELL=/bin/sh
# Don't muck with PATH
#PATH=$HOME/bin:/usr/bin:/bin:.
MAILDIR=/opt/zimbra/procmail/
# Don't muck with DEFAULT
#DEFAULT=$MAILDIR
LOGFILE=.procmaillog
VERBOSE=yes

# Get the local part of the recipient's address
:0  # note: whitespace is [ ^ space tab @ ]
* ^To:.*\<\/[^  <>@]+@
{
  :0
  * MATCH ?? ()\/[^@]+
  { LOCALPART=$MATCH }
}
DOMAIN=faxservice.com

# Forward the email
:0  # note: whitespace is [ space tab ] and [ ^ space tab ]
* ^Return-Path:[    ]*\/[^  ].+
{ env=$MATCH }
:0
! ${env+-f "$env"} ${LOCALPART}@${DOMAIN}

Если нет Return-Path: заголовок, env назначение должно закончиться пустым, а сообщение должно быть отправлено с любым отправителем конверта, который генерирует ваш Postfix.