あおきです。報告ありがとうございます。
あと、最初の指摘をしてくださった前田さんにも感謝。

  In Mail "[ruby-list:12349] Re: mailclient 0.1"
    OHARA Shigeki <os / iij.ad.jp> wrote:

> 大原です。

> と書きましたが、他にも改行の処理がおかしいと思える所があったので、
> IM を参考に、ちょっと直してみました。


> -    mstr.gsub!( /(\r\n|\n|\r)\./, "\r\n.." )
> +    lines = mstr.split(/(\r\n|\n|\r)/)
> +    mstr = ''
> +    lines.each { |l|
> +      l += "\n" if (/[^\n]$/)
> +      l.sub!(/\r?\n/, "\r\n")
> +      l.sub!(/^\./, ".." )

\rや\nを\r\nに変換するのはinetclient.rbが送信時にやっているので、
そのまま送って大丈夫です。


> -    msize = mstr.size + 5
> +    msize = mstr.size + 3

> -    write( mstr + "\r\n.\r\n", false )
> +    write( mstr + ".\r\n", false )

この部分はその通りです。パッチつけます。
また、この修正とその他の変更を加えたバージョン1.0.9をサイト

  http://www1.u-netsurf.ne.jp/~brew/mine/soft/inetc.tar.gz

におきました。
あとinetc.tar.gzという名前でin.comingにも置いておきました。
-------------------------------------------------------------------
あおきみねろう  mail: aamine / dp.u-netsurf.ne.jp
                site: http://www1.u-netsurf.ne.jp/~brew/mine/

--- org.smtpclient Thu Feb 25 17:05:09 1999 +++ smtpclient.rb Thu Feb 25 18:05:58 1999 @@ -91,11 +91,13 @@ # mstr.gsub!( /(\r\n|\n|\r)\./, "\r\n.." ) - msize = mstr.size + 5 - - tell( "SMTPsocket: sending mail (#{msize} bytes)" ) - write( mstr + "\r\n.\r\n", false ) - tell( 'SMTPsocket: sent mail' ) + tell( LOGSTAB + 'sending mail' ) + if /(\n|\r\n|\r)\Z/ === mstr[-2,2] then + msize = write( mstr + ".\r\n", false ) + else + msize = write( mstr + "\r\n.\r\n", false ) + end + tell( LOGSTAB + "sent mail (#{msize} bytes)" ) check_reply
--- org.inetclient Thu Feb 25 18:26:08 1999 +++ inetclient.rb Thu Feb 25 18:07:50 1999 @@ -98,11 +98,13 @@ def eof? ; @socket.closed? ; end def write( str, dolog = true ) - safe_write( str ) + msize = safe_write( str ) if dolog then tell (LOGSTAB + 'write ' << str.inspect ) end + + return msize end def writeline( str, dolog = true ) @@ -154,23 +156,26 @@ begin if @mode == Low then - @socket.write( str ) + msize = @socket.write( str ) else + msize = 0 + while str.size > 0 do if /\A[^\r\n]+/o === str then - @socket.write( $& ) + msize += @socket.write( $& ) str = $' end if /\A(\n|\r\n|\r)/o === str then - @socket.write( "\r\n" ) + msize += @socket.write( "\r\n" ) str = $' end end end @socket.flush + return msize rescue tell( LOGSTAB + 'TCP error when write' ) raise