Ошибка тайм-аута с помощью usocket на общем lisp

У меня проблемы с 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 на базе облака, который я также использовал.

Я использую Clozure Common Lisp 1.11.1 на MacBook Pro в ОС 10.13.3

Вот снимки обратной трассировки FYI: https://imgur.com/a/e2xcf

Есть идеи? Любая помощь будет принята с благодарностью.

1 ответ

Поскольку вы используете внешний сервер, сначала вам нужно проверить правильность адреса (подключиться через telnet), порта и, возможно, вам нужна аутентификация. Поскольку вы используете cl-smtp, сначала я рекомендую вам проверить, как он работает, для этого простейший способ тестирования smptp - использование mailcatcher внутри контейнера Docker:

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 и отправить почту на 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")

тестовая почта

Другие вопросы по тегам