web-dev-qa-db-ja.com

自動応答とバウンスを無視するようにprocmailを設定する

Procmailを使用して電子メールメッセージを受信し、それらをスクリプトに転送して処理しています。これは、電子メールの生成を意味する場合もあります(たとえば、メッセージを別のユーザーに転送したり、クエリに応答したりします)。

言うまでもなく、自動応答や休暇の応答からの電子メールをサーバーにロードすることに関心がないので、これらのメッセージをフィルターで除外する簡単な方法があるかどうか疑問に思っています。とにかくこれらをスクリプトにパイプしているので、スクリプト内でいつでも独自のフィルターをロールできますが、車輪の再発明はしたくありません。

Precedence: junkまたはPrecedence: bulkでメッセージを破棄する必要があることはすでに知っています。 procmailの他のヘッダーと同じようにフィルタリングできますか?

4
Jordan Reiter

ドキュメントを読むことは良いスタートです。ここに基本をカバーする ミニハウツー があります。自動生成されたメッセージは、FROM_DAEMONおよびFROM_MAILERルールによって取得される必要があります。また、メッセージのループを回避するために、X-Loop(上記のドキュメントで説明)を使用してください。

最後に、同じアドレスへの繰り返しの返信を抑制することができます ここに示されているように (休暇の自動応答の目的のため)。そのため、リモートシステムが正常に再生されず、差出人アドレスが適切に入力され、X-Loopヘッダーが削除された場合でも、サイクルを中断できます。

Procmailは、非常に洗練されたシステムを作成するために使用できます。これは、それ自体がプログラミング言語です。また、以下もご覧ください。

更新

Www.clarconnect.comがインターネットから削除されたため、ウェイバックマシンからコンテンツを取得しました。

概要

誰もが電子メールによる休暇の自動返信を承認しているわけではありませんが、実際には、一部のクライアント/ユーザーがそれを主張しています。したがって、ユーザーが自分の休暇の自動返信メッセージを管理できるシステムをセットアップする方法は次のとおりです。

このprocmail休暇の自動返信レシピの機能:

  • ユーザー管理の自動返信-ユーザーは自動返信を有効/無効にでき、ユーザーは毎回異なる返信メッセージを設定できます。
  • 自動返信は、自動返信が有効になるたびに1回だけメールアドレスに送信されます。その結果、自動返信ループが回避され、自動返信が有効になっているときに1人のユーザー(またはメーリングリスト)がそのアドレスに複数の電子メールを送信した場合、送信者は複数の自動返信応答に煩わされることはありません。
  • レシピは、メーリングリストやスパムへの応答を回避しようとします。 Procmailのインストールと構成

先に進む前に、システムでprocmailを有効にする必要があります。手順については、次のハウツーを参照してください。Procmailを使用した電子メールのフィルタリング

「PostfixでProcmailを有効にする」というタイトルのセクションに特に注意してください。

休暇の自動返信の構成

ユーザーの休暇の自動返信を有効にするには、このサービスを必要とするすべてのユーザーの/ home/"username"フォルダーに.procmailrcファイルを作成する必要があります。ファイルには以下のコードが含まれている必要があります。

# 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-これはメールに使用されるドメイン名です(例:[email protected])。

ここで、.procmailrcファイルに次のセキュリティ権限があることを確認する必要があります。

ユーザーとグループは、設定する電子メールユーザーのユーザー名に設定する必要があります。

ファイルのアクセス許可は、ユーザーに対してのみrwx ------に設定する必要があります(つまり、0700)。

**警告! ****

.procmailrcのアクセス許可を間違ったユーザーに設定した場合、またはユーザー、グループなどが.procmailrcを読み取り/書き込み/実行できるようにアクセス許可を設定した場合、procmailは.procmailrcファイルを無視することに注意してください。

これらの設定を構成すると、自動返信が機能するはずです。自動返信で問題が発生した場合は、次の2行のコメントを解除して、/ tmp /procmailvacation.logの内容を確認できます。

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

休暇の自動返信の使用

レシピがインストールされたので、ユーザーは次の件名の電子メールを自分に送信することで休暇の自動返信をオンにできます。

  • password Vacation on-ここで、passwordはスクリプトで構成されたパスワードです。

このメールの本文は、自動返信メールメッセージになります。ユーザーは、送信したばかりの電子メールを受信し、最後に次のテキストが追加されます。

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

The above text was installed as your vacation message

休暇の自動返信をオフにするには、ユーザーは件名を記載したメールを自分に送信します

  • password Vacation off-ここで、passwordはスクリプトで構成されたパスワードです。

ユーザーは、送信したばかりの電子メールを受信し、最後に次のテキストが追加されます。

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

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

Removed vacation message.
6
symcbean

件名に標準の応答が含まれている場合は、「不在」(または同様の)ですべてを/dev/nullにフィルタリングできます。

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