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