指定したメールアドレスからメールが届いた場合、そのメールを1つのメールアドレスに転送し、別のメールアドレスに通知を送信します。
formail の使用と procmail から直接 bash スクリプトの実行の両方を試みましたが、動作しません。
電子メールは変更せずに転送する必要がありますが、通知メールには、可能であれば送信者の電子メール アドレスと件名のみを含める必要があります (必須ではありません)。
以下は、procmail レシピの最新の試みです。
:0
* ! ^From:.*[email protected]
* ! ^From:.*[email protected]
* ! ^From:.*[email protected]
{ }
:0 E
{
:0 c
! [email protected]
:0 h
| /usr/local/bin/notify_mail.sh $FROM $SUBJECT
}
私のnotify_mail.sh
:
#!/bin/bash
echo -e "Hi,\n\nNew e-mail has arrived:\n\nFROM: $1\nSUBJECT $2" | mail -s "$2" [email protected]
答え1
スクリプトはこのように動作するはずですが、変数FROM
とSUBJECT
変数に値を入力しておらず、一般的にはシェル変数を引用符で囲みます。
これを試して:
0
* ! ^From:.*email@example\.org
* ! ^From:.*support@example\.com
* ! ^From:.*santa@northpole\.no
{ }
:0 E
{
:0 c
! [email protected]
FROM=`formail -rtzxTo:`
SUBJECT=`formail -zxSubject:`
:0 h
| /usr/local/bin/notify_mail.sh "$FROM" "$SUBJECT"
}
このformail -rtzxTo:
慣用句は少しトリッキーで、例えば次のように説明されています。https://stackoverflow.com/a/50890026/874188
正規表現内のリテラルドットの前のバックスラッシュにも注意してください。
スクリプトでは、printf
よりもを優先するはずですecho -e
。ここでは Bash 固有のものは何もないので、シェバンも自由に変更しました。
#!/bin/sh
printf "Hi,\n\nNew e-mail has arrived:\n\nFROM: %s\nSUBJECT %s\n" "$1" "$2" |
mail -s "$2" [email protected]