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

Настройка procmail для игнорирования автоответчиков и отказов

Я использую procmail для получения сообщений электронной почты, а затем пересылаю их сценарию для обработки. Иногда это будет даже означать создание электронного письма (например, пересылку сообщения другому пользователю или ответ на запрос).

Излишне говорить, что у меня нет никакого интереса загружать свой сервер электронными письмами от автоответчиков или ответами на отпуск, поэтому мне интересно, есть ли простой способ отфильтровать эти сообщения. Я все равно привязываю их к сценарию, поэтому я всегда могу добавить в сценарий свой собственный фильтр, но я бы предпочел не изобретать велосипед.

Я уже знаю, что нужно удалять сообщения Precedence: junk или Precedence: bulk. Могу я просто отфильтровать их, как любой другой заголовок в procmail?

Чтение документации было бы хорошим началом. Есть мини-хауто здесь описаны основы. Автоматически созданные сообщения должны обрабатываться правилами FROM_DAEMON и FROM_MAILER. Также используйте X-Loop (описанный в упомянутом выше документе), чтобы избежать зацикливания сообщений.

Наконец, вы можете подавить повторные ответы на один и тот же адрес. как показано здесь (для нужд автоответчика отпуска). Таким образом, даже если удаленная система не работает нормально и правильно заполняет адрес отправителя и удаляет заголовок X-Loop, вы можете прервать цикл.

Procmail можно использовать для создания очень сложных систем - это сам по себе язык программирования. Вы также можете взглянуть на:

Обновить

Поскольку сайт www.clarconnect.com отключился от Интернета, я получил контент с обратной машины:

Обзор

Я знаю, что не все одобряют автоответчики, отправляемые по электронной почте, но факт в том, что некоторые из наших клиентов / пользователей настаивают на этом. Итак, вот способ настройки системы, в которой пользователи могут управлять своими собственными сообщениями с автоответчиком в отпуске.

Особенности этого рецепта автоответчика отпуска procmail:

  • Автоответчик, управляемый пользователем - пользователь может включить / отключить автоответчик, и пользователь может каждый раз устанавливать другое ответное сообщение.
  • Автоответ отправляется на адрес электронной почты только один раз каждый раз, когда автоответчик включен. Следовательно, можно избежать зацикливания автоответчика, и если один человек (или список рассылки) отправляет несколько писем на адрес, когда автоответчик включен, отправителя не беспокоят множественные ответы автоответчика.
  • Рецепт пытается избежать ответа на списки рассылки и спам. Установить и настроить Procmail

Прежде чем продолжить, вам необходимо включить procmail в вашей системе. Для получения инструкций перейдите к следующему руководству: Фильтрация электронной почты с помощью Procmail

Обратите особое внимание на раздел «Включить Procmail в Postfix».

Настройка автоответчика во время отпуска

Чтобы включить автоответчик в отпуске для ваших пользователей, вам необходимо создать файл .procmailrc в папке / home / "username" для каждого пользователя, нуждающегося в этой услуге. Этот файл должен будет содержать приведенный ниже код.

# 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."

 }

После создания файла убедитесь, что вы изменили следующие строки:

  • $ VACATION_PASSWORD - это сделано для того, чтобы другие пользователи не могли включить / выключить ваш автоответчик в отпуске.
  • $ VACATION_DOMAIN_NAME - это доменное имя, используемое для ваших писем (например, user@domain.com).

Теперь вам нужно убедиться, что файл .procmailrc имеет следующие разрешения безопасности:

Пользователь и группа должны быть установлены на имя пользователя электронной почты, для которого вы его настраиваете.

Права доступа к файлам должны быть установлены на rwx ------ только для пользователя (например, 0700).

** Внимание! **

Обратите внимание, что если вы установите разрешения для .procmailrc не тому пользователю или установите разрешения так, чтобы пользователь, группа и другие могли читать / писать / выполнять .procmailrc, то procmail проигнорирует ваш файл .procmailrc.

После настройки этих параметров автоответчик должен работать. Если у вас возникли проблемы с автоответчиком, вы можете раскомментировать следующие две строки и проверить содержимое /tmp/procmailvacation.log.

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

Использование автоответчика во время отпуска

Теперь, когда рецепт установлен, пользователи могут включить автоответчик отпуска, отправив себе электронное письмо со следующей темой:

  • отпуск пароля на - где пароль - пароль, настроенный в скрипте.

Тело этого письма станет сообщением электронной почты с автоматическим ответом. Пользователь получит электронное письмо, которое он только что отправил самому себе, со следующим текстом, добавленным в конец:

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

The above text was installed as your vacation message

Чтобы отключить автоответчик отпуска, пользователи отправляют себе электронное письмо с темой

  • пароль отпуск отключен - где пароль - пароль, настроенный в скрипте.

Пользователь получит электронное письмо, которое он только что отправил самому себе, со следующим текстом, добавленным в конец:

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

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

Removed vacation message.

Что ж, если тема содержит стандартный ответ, то вы можете отфильтровать все с помощью «Нет на работе» (или аналогичного) до /dev/null.

:0
* 'Out Of Office'
/dev/null