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