普通lisp上usocket的超时错误

时间:2018-03-01 02:09:17

标签: sockets common-lisp clozure-cl

我遇到cl-smtp:send-email时出现问题,这似乎是在调用usocket:socket-connect时出现超时错误。

以下是我要做的事情:

(cl-smtp:send-email "outgoing.mit.edu" "m_klein@mit.edu" 
                    (list "m_klein@mit.edu") "s1" "m1”)

这似乎是发生故障的呼叫(根据回溯):

(usocket:socket-connect "outgoing.mit.edu" 25
                        :protocol :stream
                        :element-type '(unsigned-byte 8)
                        :timeout nil
                        :deadline nil
                        :nodelay nil
                        :local-host nil
                        :local-port nil)

这是错误:

  

错误:错误#<USOCKET:TIMEOUT-ERROR #x302001E5FDED>

     

在执行Listener(475)中执行:USOCKET :: RAISE-ERROR-FROM-ID。

奇怪的是,同样的函数调用已经在其他机器上运行了,但是在我当前的mac笔记本电脑或者我一直在使用的基于云的mac上都没有。

我在OS 10.13.3上的MacBook Pro上运行Clozure Common Lisp 1.11.1

以下是回溯FYI的快照:https://imgur.com/a/e2xcf

有什么想法吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

由于您使用的是外部服务器,首先需要检查地址的正确性(使用telnet连接),端口以及可能需要身份验证。 由于您使用的是cl-smtp,我首先建议您测试它是如何工作的,因为测试smptp的简单方法是在docker容器中使用mailcatcher:

docker run -d -p 1080:1080 -p 1025:1025 --name mailcatcher schickling/mailcatcher

docker ps | grep mailcatcher
6fb056fceb6b        schickling/mailcatcher   "mailcatcher -f --ip…"   9 months ago        Up 18 minutes       0.0.0.0:1025->1025/tcp, 0.0.0.0:1080->1080/tcp   mailcatcher

然后,您可以在网络浏览器localhost:1080中访问该ourtgoing邮件,并将邮件发送到localhost:1025

为了测试SMTP,服务器我建议使用telnet:

telnet                                                                                                                 
telnet> o localhost 1025
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 EventMachine SMTP Server
EHLO localhost
250-Ok EventMachine SMTP Server
250-NO-SOLICITING
250 SIZE 20000000

有一篇关于here

的精彩文章

如果您确定,您可以尝试使用lisp:

CL-USER> (cl-smtp:send-email "127.0.0.1" "antonio.querol@example.com" "pedro.lopez@example.com" "Say Hello" "Hello World"
                    :port 1025)
("Ok")

test mail