TCL电子邮件脚本无法在Activestate TCL中提供

时间:2011-09-08 23:41:00

标签: smtp tcl activestate

我在MAC OSX版本的TCL上运行了以下脚本,但它运行正常,但它挂在Windows 7机器上的ActiveState TCL上

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的全新安装,几天前下载了。)

更新: 我认为由于公司防火墙而冻结了(我不得不和别人谈谈。) 然而,当我不通过公司网络时我可以走得更远但它仍然无法传递信息。 我收到以下调试信息:

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 个答案:

答案 0 :(得分:3)

被防火墙阻止(或到达远程机器的端口tcp / 587的一般连接问题)?我从

开始
set sock [socket $that_box 587]
gets $sock

在交互式tclsh中(建议使用tkcon)。您应该在合理的时间内(可能是几秒钟)从远程服务器获取“HELO”字符串。

答案 1 :(得分:2)

看起来您没有尝试进行身份验证。在Mac上,您的Tcl安装可能包含来自Tcllib的SASL软件包,您可能没有将它包含在Windows机器上。没有SASL可用并不是一个错误,因为许多人不需要进行身份验证,但您显然需要它。您可以使用teacup实用程序将SASL程序包添加到ActiveTcl安装中。 teacup install SASL应该这样做。该软件包支持LOGIN和PLAIN SASL机制,这些机制在TLS链路上都很好。

答案 2 :(得分:2)

我花了几天时间尝试使用身份验证通过smtp.gmail.com和我的本地MS Exchange发送电子邮件,但没有成功。我终于使用下面的代码设法让它工作了。这个程序是使用pltclu从PostgreSQL运行的。

我希望它至少可以帮助一个人。

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;>

答案 3 :(得分:0)

编辑:

  

确保您的邮件客户端未设置为过于频繁地检查新邮件。如果您的邮件客户端每10分钟检查一次新邮件超过一次,您的客户端可能会反复请求您的用户名和密码。

按照Google Help Center上的步骤解锁您的Gmail。

如果握手问题仍然存在,那么似乎是Tcl的TLS实现尝试升级和降级程序包,如果不起作用,看看是否放置了tclsh.exe,或者tcl的库路径,是ssleay32.dll,并告诉关于那个我。

另一个问题,您使用的是Windows 7的x64发行版吗?

答案 4 :(得分:0)

这可能是因为谷歌安全设置。请转到“ https://www.google.com/settings/security/lesssecureapps ”并确保启用访问安全性较低的应用。这对我有用。

拉​​维。