TCL Email Script не доставляет в Activestate TCL - PullRequest
3 голосов
/ 09 сентября 2011

Я выполнил следующий сценарий на TCL-версии MAC OSX, и он работал нормально, однако зависает на ActiveState TCL на компьютере с Windows 7

proc send_simple_message {recipient email_server subject body} {
          package require smtp
          package require mime

    set token [mime::initialize -canonical text/plain -string $body]
          mime::setheader $token Subject $subject
          smtp::sendmessage $token \
                    -ports 587 \
                    -debug 1\
                    -username myAccount@gmail.com \
                    -password myPassword \
                    -recipients $recipient -servers $email_server
          mime::finalize $token
}

send_simple_message myAccount@gmail.com smtp.gmail.com \
    "This is the subject." "This is the message."

Есть идеи, что может быть не так в системе Activestate? (Это новая установка Activestate, скачанная пару дней назад.)

UPDATE: Я думаю, что это зависало из-за брандмауэра корпорации (мне придется поговорить с кем-то об этом.) ОДНАКО Несмотря на то, что я могу идти дальше, не проходя через сеть корпорации, он все равно не доставляет сообщение. Я получаю следующую отладочную информацию обратно:

Trying smtp.gmail.com...
<-- 220 mx.google.com ESMTP d8sm8712528ibl.1
--> EHLO ush10900dv (wait upto 300 seconds)
<-- 250-mx.google.com at your service, [32.178.65.125]
<-- 250-SIZE 35882577
<-- 250-8BITMIME
<-- 250-STARTTLS
<-- 250 ENHANCEDSTATUSCODES
--> STARTTLS (wait upto 300 seconds)
<-- 220 2.0.0 Ready to start TLS
--> EHLO ush10900dv (wait upto 300 seconds)
<-- 250-mx.google.com at your service, [32.178.65.125]
<-- 250-SIZE 35882577
<-- 250-8BITMIME
<-- 250-AUTH LOGIN PLAIN XOAUTH
<-- 250 ENHANCEDSTATUSCODES
--> MAIL FROM:<peddy@ush10900dv> SIZE=245 (wait upto 600 seconds)
<-- 530-5.5.1 Authentication Required. Learn more at

<-- 530 5.5.1 http://mail.google.com/support/bin/answer.py?answer=14257 d8sm8712528ibl.1
--> RSET (wait upto 0 seconds)
--> QUIT (wait upto 0 seconds)
handshake failed: resource temporarily unavailable
    while executing
"::tls::handshake $state(sd)"
    invoked from within
"smtp::sendmessage $token  -ports 587  -debug 1 -username username@gmail.com

Сценарий использует одни и те же учетные данные как на компьютере MacOS, так и на компьютере Windows / Activestate, но, похоже, он не проходит авторизацию? Есть еще идеи?

Ответы [ 5 ]

3 голосов
/ 09 сентября 2011

Заблокирован брандмауэром (или общая проблема с подключением к порту tcp / 587 удаленного компьютера)?Я бы начал с

set sock [socket $that_box 587]
gets $sock

в интерактивном tclsh (рекомендуется tkcon ).Вы должны получить строку «HELO» с удаленного сервера за разумное время (может быть пару секунд).

2 голосов
/ 13 сентября 2012

Я потратил несколько дней, пытаясь отправить электронную почту через smtp.gmail.com и через мой локальный MS Exchange с использованием аутентификации, но безуспешно. Мне наконец удалось заставить это работать, используя код ниже. Эта процедура была запущена из PostgreSQL с использованием pltclu.

Надеюсь, это поможет хотя бы одному человеку.

create or replace function pgmail(text, text, text, text,text,text,text,text) returns int4 AS $$
package require smtp
package require mime
set mailfrom $1
set mailto $2
set mailsubject $3
set body $4
set myHost $5
set myPort $6
set myUname $7
set myUpassword $8


set token [mime::initialize -canonical "text/plain" -encoding "7bit" -string $body]
          mime::setheader $token Subject $mailsubject
          smtp::sendmessage $token \
            -servers [list $myHost] -ports [list $myPort]\
            -usetls true\
            -debug true\
            -username $myUname \
            -password $myUpassword\
            -queue false\
            -atleastone true\
            -header [list From "$mailfrom"] \
            -header [list To "$mailto"] \
            -header [list Subject "$mailsubject"]\
            -header [list Date "[clock format [clock seconds]]"]
          mime::finalize $token
return 1
$$ LANGUAGE pltclu;>
2 голосов
/ 22 сентября 2011

Похоже, вы не пытаетесь аутентифицироваться.На вашем Mac ваша установка Tcl, вероятно, включает в себя пакет SASL от Tcllib, и вы, возможно, не включили его на свой компьютер с Windows.Отсутствие SASL не является ошибкой, так как многим людям не нужно проходить аутентификацию, но вам это явно необходимо.Вы можете использовать утилиту teacup для добавления пакета SASL в вашу установку ActiveTcl.teacup install SASL должен это сделать.Пакет поддерживает механизмы LOGIN и PLAIN SASL, которые хорошо работают по каналу TLS.

0 голосов
/ 07 ноября 2014

Это может быть связано с настройками безопасности Google.перейдите к «https://www.google.com/settings/security/lesssecureapps" и убедитесь, что вы включили Доступ для менее безопасных приложений . Это сработало для меня.

Ravi.

0 голосов
/ 23 сентября 2011

РЕДАКТИРОВАТЬ:

Убедитесь, что ваш почтовый клиент не слишком часто проверяет наличие новой почты.Если ваш почтовый клиент проверяет наличие новых сообщений чаще, чем раз в 10 минут, ваш клиент может неоднократно запрашивать ваше имя пользователя и пароль.

Выполните действия, описанные в Справочном центре Google и разблокируйте свою почту.

Если проблемы с рукопожатием остаются, это может быть реализацией TLS TLS, попробуйте обновить и понизить версиюпакет, если это не сработает, посмотрите, где находятся tclsh.exe или путь к библиотеке tcl, ssleay32.dll, и расскажите мне об этом.

другой вопрос, используете ли вы дистрибутив x64Windows 7?

...