Настройка procmail для игнорирования автоответчиков и отказов
Я использую procmail для получения сообщений электронной почты, а затем пересылаю их в скрипт для обработки. Иногда это даже будет означать создание электронного письма (например, пересылка сообщения другому пользователю или ответ на запрос).
Излишне говорить, что я не заинтересован в загрузке моего сервера электронными письмами от автоответчиков или ответов об отпуске, поэтому мне интересно, есть ли простой способ отфильтровать эти сообщения. В любом случае, я передаю их в сценарий, поэтому всегда могу добавить свой собственный фильтр в сценарий, но я бы не стал изобретать велосипед.
Я уже знаю, я должен мусор сообщения с Precedence: junk
или же Precedence: bulk
, Могу ли я просто отфильтровать их, как любой другой заголовок в procmail?
2 ответа
Чтение документации было бы хорошим началом. Здесь есть мини-инструкция, которая охватывает основы. Автоматически сгенерированные сообщения должны приниматься по правилам FROM_DAEMON и FROM_MAILER. Также используйте X-Loop (описанный в документе doc, указанном выше), чтобы избежать зацикливания сообщений.
Наконец, вы можете отменить повторные ответы на один и тот же адрес, как показано здесь (для целей автоответчика отпуска). Таким образом, даже если удаленная система не работает нормально и правильно заполняет адрес from и удаляет заголовок 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