----Next_Part(Mon_Sep__8_18:37:42_1997_809)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
¤â¤â¤Á¤ã¤ó¡÷¤¢¤ë¤â¤Ë¤³¤¹¤Ç¤¹¡¥
¤È¤ê¤¢¤¨¤º ruby ÆþÌç¤È¤¤¤¦¤³¤È¤Ç¡¤ºÇ¤âñ ML ¤Î¥×¥í¥°¥é¥à¤ò
¤¤Æ¤ß¤Þ¤·¤¿¡¨Â
ËÜÅö¤Ï¤â¤Ã¤È¤Á¤ã¤ó¤Èµ¡ÉÕ¤±¤Æ¤«¤é ·¤¿¤«¤Ã¤¿¤ó¤Ç¤¹¤¬¡¨Â
¡¦¼¡¤Ë¿¨¤ë¤Î¤¬¤¤¤Ä¤Ë¤Ê¤ë¤«Ê¬¤«¤é¤Ê¤¤
¡¦¤Þ¤º¤Ê ϤȤäȤȻØÅ¦¤µ¤ì¤¿Êý¤¬¶ºÀµ¤¬³¨Â º¤È¤¤¤¦¤Î¤¬¤¢¤ë¤Î¤Ç¡¤¤È¤ê¤¢¤¨¤ºÁ÷¤Ã¤Æ¤ß¤Þ¤¹¡¥
¤è¤êÈþ¤·¤¤¥¹¥¿¥¤¥ë¡¤Åª³Î¤ÊÎã³° ¨Â ¤Âº£¤Ï¤ä¤Ã¤Æ¤Ê¤¤) ¤ò¤É¤¦¤¤¤¦
É÷¤ËÆþ¤ì¤ë¤È´è¾æ¤Ë¤Ê¤ë¤«¡¤¤Ê¤É¡¤¤¤¤í¤¤¤í¶µ¤¨¤ÆÄº¤±¤ë¤È´ò¤·¤¤¤Ç
¤¹ (_ _)¡¥
--
ºÇ¥§¡¢¥Ò¡¢¥Þ¡£¡¢ML ¤ä procmail ¤ß¤¿¤¤¤Ê¤â¤Î¤òºî¤ë¤¿¤á¤Î toolkit ¤Ë
¤Ê¤ëÉôÉÊ·´¤òºî¤í¤¦¤È»×¤Ã¤Æ¤Þ¤¹¡¥
# ºÇ ¨Â ðåòì ¤Ç ³¤¦¤È»×¤Ã¤Æ¤¿¤ó¤À¤±¤É¡¨Âðåòì ¤Ç OOP ¤·¤è¤¦¤È
# ¤·¤Æ¤´¤Á¤ã¤´¤Á¤ã¤Ë¤Ê¤Ã¤Æ¡¤·ù¤Ë¤Ê¤Ã¤Æ¤ä¤á¤¿¡¥
º£¸åÍߤ·¤¤/ºî¤ë¤â¤Î:
libSMTP
libMIME
libMailHeader
¤È¤ê¤¢¤¨¤º libMailHeader ¤«¤éºî¤í¤¦¡¥¡¥¡¥
----Next_Part(Mon_Sep__8_18:37:42_1997_809)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
class CMail
# ¥³¥ó¥¹¥È¥é¥¯¥¿
def CMail.new(f)
unless f.kind_of?(IO)
f pen(f, "r")
me uper(f) # call initialize(f)
f.close
else
me uper
end
return me
end
# ü²¨Â
äåéîéôéáìéú卿 Àèåáäå Àâïä ÷èéìæ®çåôó¨©
¤ß®ãèïð¡
îåøô éæ ¯ÞÆòïí óëéð Æòïíìéî âòåáéæ ¯Þ¤¯ åîïæ èåáäåò
éæ ¯Þ¨ÜÓ«©ºÜ󪨮ª©¯
áôôò Àèåáäå¼¼ ¤± ¢º ¤² ¢Üî¢
åìóå
óõ⡨¯ÞÜ󫯬 §§ Àèåáäå¼¼ Àèåáäåò®ðï¢Üô¢ ¤ß ¢Üî¢
åî åî òåôõòî õîìåóó ¤ß
÷èéìæ®çåôó¨©
âòåáéæ ¯ÞÆòïí Àâïäù®ðõó訤ߩ
åî åî
¥á¡¼¥ë¥Ø¥Ã¥À¤ò¼è¤ê ¨Â
äåèåáäåò
òåôõòî Àèåáäå åî
¥á¡¼¥ë¥Ü¥Ç¥£¤ò¼è¤ê ¨Â
äåâïäù
òåôõòî Àâïä åî
»ØÄê¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤òÁ´¤Æ¼è¤ê ¨Â
äåÛݨæéåìä Àèåáäåò®åáãè üì ¼¼ éæ ¯Þ£ûæéåìäý¯é
òåôõòî åî
¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤Î·Ñ³¹Ô¤ò¤Ä¤Ê¤²¤Æ°ì¹Ô¤Ë¤¹¤ë
def join_header
header ]
@header.each {
|l|
line .clone
line.gsub!(/\r/, '')
line.gsub!(/\n/, '')
line.gsub!(/\t/, ' ')
if line /^\s+(.*)/
line eader.pop + " " + $1
else
if not header.empty?
header << header.pop + "\n"
end
end
header << line
}
header << header.pop + "\n"
return header
end
end
----Next_Part(Mon_Sep__8_18:37:42_1997_809)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
class CMailSpool
MAX_FILES 000 # 1¤Ä¤Î¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤ÎºÇÂç¥Õ¥¡¥¤¥ë¿ô
# ¥³¥ó¥¹¥È¥é¥¯¥¿
def CMailSpool.new(d)
return super(d)
end
# ü²¨Â
äåéîéôéáìéúå¨ä Àäéò
åî
¥Ç¥£¥ì¥¯¥È¥ê¤òºî¤ë
def create_dir(dir)
Dir.mkdir(dir) if not File.exist?(dir)
end
private :create_dir
# ¥Õ¥¡¥¤¥ë¤òÆþ¤ì¤ë¤Ù¤¾ì òÊÖ¤¨Â
äå÷èåòåßôïßçï¨áòôéãìå©
òåôõòî Àäéò éæ ÍÁØßÆÉÌÅ
âáóå áòôéãìÍÁØßÆÉÌÅÓ©®ôïßÍÁØßÆÉÌÅ òåôõòî Àäéò ¢¯âáóå®ôïß åî ðòéöáôº÷èåòåßôïßçï
¤¢¤ë sequence ¥Õ¥¡¥¤¥ë¤ÎÃæ¤ÇºÇÂç¤Î¥â¥Î¤ò¼è¤ê ¨Â
äåìáóôßóåñõåîãå¨ äéòó éò®çìïâ¨Àäéò ¢¯ª¢ íá
äéòó®åáã üì îåøô éæ Æéìå®äéòåãôïòù¿¨ì©
éìå®âáóåîáíå¨ì©®ôïßé
íá éæ íá
äé ä颯íáø®ôïßó
æéìå éò®çìïâ¨ä颯ª¢ æéìåó®åáãè üì éìå®âáóåîáíå¨ì©®ôïßé
íá éæ íá òåôõòî íá åî ðòéöáôºìáóôßóåñõåîãå
óåñõåîãå È֤Υե¡¥¤¥ë¤Ë body ¤ò ¨Â
äåðõô¨óåñ¬ âïäù äé èåòåßôïßçï¨óåñ ãòåáôåßäéò¨äéò éìå®îå÷¨ä颯óåñ®ôïßó¢÷¢©
¼¼ âïäù
æ®ãìïó åî
ºÇÂç¤Î sequence ¤ò»ý¤Ä¥Õ¥¡¥¤¥ë¤òÄɲ乤ë
def add(body)
print last_sequence, "\n"
put(last_sequence + 1, body)
end
# sequence È֤Υե¡¥¤¥ë¤ò get ¤¹¤ë
def get(seq)
fn here_to_go(seq) + "/" + seq.to_s
return [] if not File.exist?(fn)
f ile.new(fn, "r")
body ]
f.each {
|l|
body << l
}
f.close
return body
end
end
----Next_Part(Mon_Sep__8_18:37:42_1997_809)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
#!/usr/local/bin/ruby
##########
#
$ml_address hoge-ml / hoge.co.jp'
$ml_admin owner-hoge-ml / hoge.co.jp'
$ml_member ./members'
$ml_spool ./spool'
$sendmail /usr/lib/sendmail'
##########
# ¥á¥ó¥Ð¥ê¥¹¥È¤òºî¤ë
def get_members(file)
f ile.open(file)
members "
f.each_line {
|l|
line .clone
line.sub!(/#.*$/, '')
if /(\S+@\S+)/
members + 1 + " "
end
}
f.close
return members
end
##########
# ¥Ø¥Ã¥À¤òºî¤ë
## Reply-To ¤òÉÕ¤±¤ë¡¥¸µ¤Î¥á¡¼¥ë¤Ë¤¢¤Ã¤¿¤é¤ò get¡¥
## ¤¤¤é¤Ê¤¤¥Õ¥£¡¼¥ë¥É¤Ïºï¤ë¡¥X-* ¤Ï»Ä¤¹¡©
def create_header(header)
field_proc
"from:" Proc.new { |l| l },
"to:" Proc.new { |l| l },
"cc:" Proc.new { |l| l },
"mime-version:" Proc.new { |l| l },
"content-type:" Proc.new { |l| l },
"content-transfer-encoding:" Proc.new { |l| l },
"reply-to:" Proc.new {
|l|
reply_flag RUE
l
},
"subject:" Proc.new {
|l|
s "
if l /^subject:\s*(.*)/i
s 1
end
s.gsub(/re:\s*re:/i, "Re:")
"Subject: " + s + "\n"
},
}
target ]
reply_flag ALSE
header.each {
|l|
f .split[0].downcase
if field_proc.key?(f)
target << field_proc[f].call(l)
end
}
if reply_flag FALSE
target << "Reply-To: " + $ml_address + "\n"
end
return target
end
##########
# main
require "CMail"
orig Mail.new(STDIN)
head reate_header(orig.join_header)
body rig.body
mail ead + "\n" + body
print mail
# ¥á¥ó¥Ð¥ê¥¹¥È¤ò¼èÆÀ
member et_members($ml_member)
print member, "\n"
exit 0
# ¥á¡¼¥ë¤òÁ÷¤ë
com |" + $sendmail + " -oi -f" + $ml_admin + " " + member
sendmail pen(com, "w")
sendmail.write(mail + "\n")
sendmail.close
# spool ¤ËÊݸ
require "CMailSpool"
s MailSpool.new($ml_spool)
s.add(mail)
exit 0
----Next_Part(Mon_Sep__8_18:37:42_1997_809)----