Smalltalk 在readSmtpResult中执行WAEmailMessage时,GEMSTONE挂起

Smalltalk 在readSmtpResult中执行WAEmailMessage时,GEMSTONE挂起,smalltalk,seaside,gemstone,Smalltalk,Seaside,Gemstone,我已经在MAC上安装了MACOSX Lion,安装了Gemtools的最新版本(1.0 beta 87),glass workspace的最新版本(1.0 beta 8.7.4)和GEMSTONE的最新版本:3.1.0.1。 在此基础上,我使用以下方法加载Seaside: MCPlatformSupport commitOnAlmostOutOfMemoryDuring: [ Gofer project load: 'Seaside30' version: '3.0.7.1'.

我已经在MAC上安装了MACOSX Lion,安装了Gemtools的最新版本(1.0 beta 87),glass workspace的最新版本(1.0 beta 8.7.4)和GEMSTONE的最新版本:3.1.0.1。 在此基础上,我使用以下方法加载Seaside:

MCPlatformSupport commitOnAlmostOutOfMemoryDuring: [    
    Gofer project load: 'Seaside30' version: '3.0.7.1'.    

    Gofer new
    squeaksource: 'MetacelloRepository';
    package: 'ConfigurationOfMetacello';
    load.
    (Smalltalk at: #ConfigurationOfMetacello) perform: #load.


    Gofer new
    squeaksource: 'MetacelloRepository';
    package: 'ConfigurationOfSeasideRest';
    load.


].
ConfigurationOfSeasideRest project stableVersion load: 'Tests'
所有工作正常,但如果我尝试评估此作品,系统将“挂起”:

(WAEmailMessage
     from: (WAEmailAddress address: 'xx@aa.com' username: 'fromman')
     to: (WAEmailAddress address: 'shyam1.sundaresan1@gmail.com' username: 'shyam')
     subject: 'Email Test')   
          body: 'This is a Test Email sent'; 
          send.
通过debug,我看到它挂起的位置是SendMail>>send

send
    | rc |
    ^self isEnabled
    ifFalse: [self saveToFile]
    ifTrue: [ self halt.
        rc := self openTcpConnection.
        rc
            ifTrue: 
                [   rc ifTrue: [rc := self readSmtpResult] "==> HANGS HERE ==>"
                rc ifTrue: [rc := self sendHelo].
                rc ifTrue: [rc := self readSmtpResult].
                rc ifTrue: [rc := self sendMailFrom].
                rc ifTrue: [rc := self readSmtpResult]. 
具体地说,它不会(永远)退出以下循环,而在readSmtpResult中也会退出:

readSmtpResult
| result firstChar |

    [self readWillNotBlockWithin: 5000]
        whileFalse: [GsFile stderr log: 'Waiting for server to write...'].
使用Telnet,该端口连接良好

shyam:opt shyam$ telnet mailhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 shyam.homenet.telecomitalia.it ESMTP Postfix
我还检查了smtpHost、smtpPort、ownDomainName等。。。都是对的。您还注意到/var/log/mail.log中没有写入任何内容

此外,在同一台机器上的PHARO 1.4引擎+Seaside上的同一段代码运行良好,使用以下命令行,邮件可以通过gmail正确转发

echo 'It works' | mailx -s 'Test message' shyam1.sundaresan1@gmail.com 
任何有助于我克服僵局的指标都将受到衷心欢迎

谢谢


希亚姆

+1表示在解决问题上投入了大量精力。我想我曾经有过类似的问题,但奇怪的是,不是关于宝石,而是关于Squeak(你的工作就是为了这个)。解决方案是将CRLFCRLF(ascii\13\10\13\10)附加到smtp。出于某种原因,邮件服务器等待着这个消息,因此不想应答。实际上,网络上发生了什么?当您进入#readSmtpResult时,Wireshark(或类似的)会告诉您什么?SMTP客户端的行为有点像
expect
。可能发生的情况是,客户端已连接,现在在
readSmtpResult
中等待服务器回答类似
220 server ESMTP sendmail
的问题。你能记录下什么是从电线来的,什么是走到电线上的吗?@frank和@tobias我试过:
tcpdump-tA-v-I lo0端口25
。然而,
telnet mailhost 25
输出大量输出,而Gemstone根本不产生输出。顺便说一句,进入系统原语之前的最后一个调用是(extract):
connectTo:portNumber on:host | res | res:=true。[res isKindOf:Boolean]whileTrue:[res:=self\u twooargprim:2 with:host with:portNumber.res==false…
此处主机为“mailhost”,端口号为25(如预期)。返回值为“res”是47。@eznme,我想试试你说的,但我知道怎么做。谢谢下载Wireshark,我会再做一些作业,然后回来。谢谢