メーリングリスト用gawkスクリプト
-------- Gabacho-Netさんのタイプ3を元にしています --------
手を加えた項目
- 連番が、[friends 1]、[friends 2]...となるのを、[friends 00001]、[friends 00002]となるようにした。
- [friends 2] RE: [friends 1] friends....と連番が連なってしまう場合の対処。
- 投稿してくるメールのサイズを32kバイト以内に制限。
- gawk、sendmailのファイルパス。
その他
- あらかじめ、次のコマンドで、パーミッションの設定をしておいてください。
chmod 1777 /usr/tmp
- 必要に応じて、メーリングリスト用添付ファイル除去フィルタを併用してください。
- 実際の設定、運用にあたっては、Gabacho-Netさんの簡易メーリングリスト用GAWKスクリプトのページを熟読してください。"etc/aliases"等の設定は重要です。
- コンパクトフラッシュを使っている場合は、"/var/mlist/"を"/var/spool/mlist/"に変更して設定しておくと、設定が保存されるようになります。
以下、スクリプトの雛型です。同じもの(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
戻る