0

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>

执行时:USOCKET::RAISE-ERROR-FROM-ID,在进程监听器 (475)。

奇怪的是,相同的函数调用在其他机器上也有效,但在我当前的 mac 笔记本电脑或我一直在使用的基于云的 mac 上却没有。

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

以下是回溯仅供参考的快照:https ://imgur.com/a/e2xcf

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

4

1 回答 1

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

这里有一篇很棒的文章

当您确定这一点时,您可以尝试使用 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")

测试邮件

于 2018-03-07T08:00:26.473 回答