LaterMail 再々修正

サササッと直すと見落としがあるものですね。結構慎重に修正したつもりだったんですが。

Undelivered Mail Returned to Sender

Diagnostic-Code: smtp; 501 Syntax error in parameters or arguments というメッセージがついて、メールが送れないというエラーメールが返ってきました。このメッセージはこういうことのようです。

RETおよびENVIDパラメータはいかなる単一なMAILコマンドにおいてもそれぞれ複数回出現してはならない。もしMAILコマンドにおいてこれらのパラメータのうちのそれぞれどちらかが複数回出現するならば、ESMTPサーバーは"501 syntax error in parameters or arguments"で反応するべきである。

http://weio.at.infoseek.co.jp/rfc1891ej.txt

つまり、From: や To: が複数回含まれていると。添付のヘッダを見ると確かに Message-Id: を挟んで From: と To: が2回書かれています。

latermail.rb

ヘッダの出現順序に依存しないように修正したのに、Message-Id: の前に From:、To: が出てきていないとそれぞれを挿入するコードが残っていたため、2回書くことになってしまっていました。(出現順序云々を別にして元々バグですが)

    from_write = to_write = tof = ccf = false

      when /^From:/i
        from_write = true
        putbuf(from_message)
      when /^To:/i
        to_write, tof, ccf = true, true, false
        putbuf("To: #{from}")

      when /^Message-Id:/i
        putbuf(from_message)    if !from_write && from
        putbuf("To: #{from}")  if !to_write
        putbuf(line)
        dt = add(Time.now.to_s, to)    unless dt
        @io = open("#{@dir}#{dt.strftime('%Y%m%d%H%M%S')}.#{user}", "w")
        @buf.each { |bf| putbuf(bf) }