3

我在 TCL 的 MAC OSX 版本上运行了以下脚本,它运行良好,但是它挂在 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 机器上使用相同的凭据,但似乎授权失败?还有什么想法吗?

4

5 回答 5

3

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

set sock [socket $that_box 587]
gets $sock

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

于 2011-09-09T00:56:06.533 回答
2

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

于 2011-09-22T11:03:18.677 回答
2

我花了几天时间尝试使用身份验证通过 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;>
于 2012-09-13T11:32:25.033 回答
0

编辑:

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

按照Google 帮助中心上的步骤操作的步骤解锁您的 gmail。

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

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

于 2011-09-23T15:11:59.270 回答
0

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

拉维。

于 2014-11-07T10:24:23.613 回答