Smtp TCL电子邮件脚本没有';t在Activestate TCL中交付

Smtp TCL电子邮件脚本没有';t在Activestate TCL中交付,smtp,tcl,activestate,Smtp,Tcl,Activestate,我在MacOSX版本的TCL上运行了以下脚本,它运行得很好,但是它挂在Windows7机器上的ActiveState TCL上 proc send_simple_message {recipient email_server subject body} { package require smtp package require mime set token [mime::initialize -canonical text/plain -str

我在MacOSX版本的TCL上运行了以下脚本,它运行得很好,但是它挂在Windows7机器上的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
正在尝试smtp.gmail.com。。。
EHLO ush10900dv(最多等待300秒)
被防火墙阻止(或到达远程计算机的tcp/587端口时出现一般连接问题)?我先从

set sock [socket $that_box 587]
gets $sock

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

看起来您没有尝试进行身份验证。在Mac上,您的Tcl安装可能包括来自Tcllib的SASL包,而您可能没有将其包含在Windows计算机上。没有可用的SASL不是一个错误,因为许多人不必进行身份验证,但您显然需要它。您可以使用
teacup
实用程序将SASL包添加到ActiveTcl安装中<代码>茶杯安装SASL
应该可以。该软件包支持登录和普通SASL机制,这在TLS链接上很好。

编辑:

确保您的邮件客户端没有设置为经常检查新邮件。如果您的邮件客户端每10分钟检查一次以上的新邮件,您的客户端可能会重复请求您的用户名和密码

按照上的步骤解锁您的gmail

如果握手问题仍然存在,则可能是Tcl的TLS实现尝试升级和降级包,如果这不起作用,请查看tclsh.exe的位置或Tcl的库路径是否为ssleay32.dll,并告诉我


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

我花了几天时间尝试使用身份验证通过smtp.gmail.com和我的本地MS Exchange发送电子邮件,但没有成功。我终于用下面的代码使它工作了。此过程是使用pltclu从withn 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;>

这可能是因为谷歌的安全设置。请转到“”,并确保启用对不太安全的应用程序的访问。这对我有用


Ravi.

您是否注意到带有URL的530消息?这可能为您提供了答案。您应该(a)将
From
头添加到mime消息,或者(b)为smtp::sendmessage命令指定
-originator
选项。我注意到530,但它在一个版本上工作,但在另一个版本上工作,但用户名和密码相同。所以我不确定为什么它会给我一个授权错误。这两个都不起作用。是否有openstate TCL的工作示例?这没什么大不了的?这很有效。。。赏金到期了。当我再次给它悬赏的时候,它是100而不是50?我在powershell中找到了解决方法,但我还是想给你奖金,如果没有其他原因,除了你给了我一个合理的答案。。。我发现这些在这个网站上很少见。(我问了一些我很想得到答案的问题,然后一些某某结束了这个问题,因为他不喜欢它!这与本网站的整个目的背道而驰。)谢谢!很高兴能帮忙。