Ошибка тайм-аута с помощью 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")