メーリングリスト用gawkスクリプト
-------- Gabacho-Netさんのタイプ3を元にしています --------

手を加えた項目 その他
以下、スクリプトの雛型です。同じもの(ml_type3_)はここにあります。
------ "ML"、"DOMAIN"はエディタで実際に使う名前に置き換えてください。 ------
#!/bin/sh -
/usr/bin/gawk '
BEGIN {
  getline seq < "/var/mlist/ML.seq"
  close("/var/mlist/ML.seq")
  if (seq >= 99999)  seq = 0            # <-- add for seq number
  ++seq
  print seq > "/var/mlist/ML.seq"
  close("/var/mlist/ML.seq")
  seq = sprintf ("%05d", seq)           # <-- add for seq number
  IGNORECASE=1
  RS=""
  size_limit=32768                      # <-- add for size limit
  size_count=0                          # <-- add for size limit
}
NR==1 {
  s_filter("ML")                        # <-- add for subject decode
  gsub(/\nReply-To:[^\n]*(\n[ \t][^\n]*)*/, "")
  gsub(/\nReturn-Receipt-To:[^\n]*(\n[ \t][^\n]*)*/, "")
  gsub(/\nErrors-To:[^\n]*(\n[ \t][^\n]*)*/, "")
  gsub(/\nDisposition-Notification-To:[^\n]*(\n[ \t][^\n]*)*/, "")
  if (match($0, /\nSubject:(\n?[ \t])*(\[ML [0-9]+\] *)*Re:/))
    gsub(/\nSubject:(\n?[ \t])*((\[ML [0-9]+\] *)*(Re: *)*)*/, \
         "\nSubject: [ML " seq "] Re: ")
  else
    gsub(/\nSubject:(\n?[ \t])*(\[ML [0-9]+\] *)*/, \
         "\nSubject: [ML " seq "] ")
  print
  if (!match($0, /\nSubject:/))
    print "Subject: [ML " seq "] "
  print "Reply-To: ML@DOMAIN"
#  print "ml-post: mailto:<ML@DOMAIN>"          # <-- if necessary, add
#  print "ml-join: mailto:<ML-join@DOMAIN>"     # <-- if necessary, add
#  print "ml-leave: mailto:<ML-leave@DOMAIN>"   # <-- if necessary, add
  print ""
  print "[ML " seq "]\n"
  RS="\n"
  next
}
{
  size_count=size_count+length()+1      # <-- add for size limit
  if (size_count>size_limit) {          # <-- add for size limit
    print "*** SIZE EXCEEDED!!! ***"    # <-- add for size limit
    exit                                # <-- add for size limit
  }                                     # <-- add for size limit
  print
}

function s_filter(ml_name)
{
  decode = "/tmp/" ml_name "-decode"
  encode = "/tmp/" ml_name "-encode"

  ##---- get Subject ----
  subject = substr($0, match($0, /\nSubject:[^\n]*(\n[\t ][^\n]*)*/)+1, RLENGTH-1)

  ##---- iso-2022-jp?B? only ----
  if ( match(subject, /=\?iso-2022-jp\?B\?/) ) {

    ##---- mime decode and delete \n ----
    print subject |"nkf -m >" decode
    close("nkf -m >" decode)
    getline subject < decode
    gsub(/\n[\t ]*/, "", subject)

    ##---- mime encode and add \t ----
    print subject |"nkf -M >" encode
    close("nkf -M >" encode)
    getline subject < encode
    gsub(/\?= /, "\?=", subject)          # remove " " after "?="
    gsub(/\n/, "\n\t", subject)

    ##---- replace Subject: ----
    sub(/\nSubject:[^\n]*(\n[\t ][^\n]*)*/, "\n" subject)
  }
}
' | /usr/sbin/sendmail -oi -f owner-ML@DOMAIN ML-outgoing
戻る