戻る
簡易メーリングリスト用GAWKスクリプト タイプ2

 スクリプトの各文の右側のにマウスカーソルを置くと説明が現れます(Netscape Navigator 3では現れません。ご了承ください)。

#!/bin/sh -
シェルを呼び出すおまじないです。
/usr/local/bin/gawk '
GAWKを呼び出します。
BEGIN {
前処理を指定します。
  getline seq < "/var/mlist/ML.seq"
連番保持ファイルから連番を読み込みます。
  close("/var/mlist/ML.seq")
入力ファイルとして開かれた連番保持ファイルを閉じます。
  ++seq
連番をカウントアップします。
  print seq > "/var/mlist/ML.seq"
新しい連番を連番保持ファイルに書き込みます。
  close("/var/mlist/ML.seq")
出力ファイルとして開かれた連番保持ファイルを閉じます。
  IGNORECASE=1
大文字・小文字を区別しないよう指定します。
  RS=""
空白行までのメールヘッダを第1レコードとして入力するようにします。
}
前処理はここまで。
NR==1 {
第1レコード(メールヘッダ)に対する処理を指定します。
  gsub(/\nReturn-Receipt-To:[^\n]*(\n[ \t][^\n]*)*/, "")
Return-Receipt-Toヘッダを削除します。
  gsub(/\nErrors-To:[^\n]*(\n[ \t][^\n]*)*/, "")
Errors-Toヘッダを削除します。
  gsub(/\nDisposition-Notification-To:[^\n]*(\n[ \t][^\n]*)*/, "")
Disposition-Notification-Toヘッダを削除します。
  if (match($0, /\nSubject:(\n?[ \t])*(\[ML [0-9]+\] *)*Re:/))
    gsub(/\nSubject:(\n?[ \t])*((\[ML [0-9]+\] *)*(Re: *)*)*/, \
         "\nSubject: [ML " seq "] Re: ")
サブジェクトに「Re:」があった場合…
新しい連番と「Re:」を付けます(古い連番は置き換えられます)。
  else
    gsub(/\nSubject:(\n?[ \t])*(\[ML [0-9]+\] *)*/, \
         "\nSubject: [ML " seq "] ")
サブジェクトに「Re:」がなかった場合…
新しい連番を付けます(古い連番があれば置き換えられます)。
  print
ここまで処理したメールヘッダを出力します。
  if (!match($0, /\nSubject:/))
    print "Subject: [ML " seq "] "
サブジェクトがなかったならば…
連番だけのサブジェクトを追加します。
  if (!match($0, /\nReply-To:/))
    print "Reply-To: ML@DOMAIN"
Reply-Toヘッダがなかったならば…
メーリングリスト宛のReply-Toヘッダを追加します。
  print ""
空白行を出力します(これが本文との区切りになります)。
  RS="\n"
以後、本文が一行ずつ入力されるようにします。
  next
次のレコードの読み込みに進みます。
}
メールヘッダに対する処理はここまで。
{print}
第2レコード以降(本文の各行)をそのまま出力します。
' | /usr/lib/sendmail -oi -f owner-ML@DOMAIN ML-outgoing
GAWKの出力結果をsendmailへ送ると…
sendmailは、owner-ML名でML-outgoing(アドレスリスト)宛に配信します。

戻る