【问题标题】:TCL Email Script doesn't deliver in Activestate TCLTCL 电子邮件脚本未在 Activestate TCL 中提供
【发布时间】:2011-11-13 10:03:36
【问题描述】:

我在 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 机器上使用相同的凭据,但似乎授权失败?还有什么想法吗?

【问题讨论】:

  • 您是否注意到带有 URL 的 530 消息?这可能会给你答案。
  • 您应该 (a) 在 mime 消息中添加 From 标头,或者 (b) 为 smtp::sendmessage 命令指定 -originator 选项。
  • 我确实注意到了 530,但它在一个版本上工作,但在另一个版本上使用相同的用户名和密码。所以我不确定为什么它给了我一个授权错误。
  • 这些都不起作用。有开放状态 TCL 的工作示例吗?这应该没什么大不了的吧?

标签: smtp tcl activestate


【解决方案1】:

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

set sock [socket $that_box 587]
gets $sock

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这有效...赏金已过期。当我再次尝试对其进行赏金时,它会变成 100 而不是 50?我想出了如何在 powershell 中做到这一点,但我仍然想给你赏金,如果没有其他原因,只是你给了我一个明智的答案......我发现这些在这个网站上非常罕见。 (我问了一些我非常想回答的问题,然后一些某某结束了他不喜欢的问题!这与本网站的全部目的背道而驰。)
    • 谢谢!很高兴能够提供帮助。
    【解决方案3】:

    我花了几天时间尝试使用身份验证通过 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;>
    

    【讨论】:

      【解决方案4】:

      编辑:

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

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

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

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

      【讨论】:

        【解决方案5】:

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

        拉维。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-05
          • 2020-12-29
          • 1970-01-01
          • 1970-01-01
          • 2016-10-27
          • 2012-10-09
          • 1970-01-01
          相关资源
          最近更新 更多