----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)----