Smalltalk 在readSmtpResult中执行WAEmailMessage时,GEMSTONE挂起
我已经在MAC上安装了MACOSX Lion,安装了Gemtools的最新版本(1.0 beta 87),glass workspace的最新版本(1.0 beta 8.7.4)和GEMSTONE的最新版本:3.1.0.1。 在此基础上,我使用以下方法加载Seaside: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'.
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,我会再做一些作业,然后回来。谢谢