2011-09-08 54 views
3

我跑TCL的MAC OSX版本下面的脚本,它工作得很好但是它挂在ActiveState公司TCL在Windows 7机器上TCL电子邮件的脚本在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 [email protected] \ 
        -password myPassword \ 
        -recipients $recipient -servers $email_server 
      mime::finalize $token 
} 

send_simple_message [email protected] smtp.gmail.com \ 
    "This is the subject." "This is the message." 

任何想法在Activestate系统上可能会出错? (这是一个新安装的ActiveState的,下载了前几天。)

更新: 我认为这是由于CORP防火墙冷冻(我得找人倾诉一下。) 无论其在当不通过公司网络时,我可以走得更远,它仍然不传递信息。 我得到以下调试信息回:

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:<[email protected]> 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 [email protected] 

脚本使用MacOS的计算机和Windows/ActiveState的机器上都相同的凭据,但它似乎没有授权?还有什么想法?

+0

您是否注意到带有URL的530消息?这可能为你解答。 –

+0

你应该(a)向MIME消息添加一个From头,或者(b)为smtp :: sendmessage命令指定'-originator'选项。 –

+0

我确实注意到了530,但它可以在一个版本上运行,但不能在另一个版本上运行,并且具有相同的用户名和密码。所以我不确定为什么它给了我一个授权错误。 – NoMoreZealots

回答

2

它看起来像你不试图进行身份验证。在Mac上,您的Tcl安装可能包含来自Tcllib的SASL软件包,您可能未将其包含在Windows机器上。没有SASL可用不是一个错误,因为许多人不必认证,但你明确要求它。您可以使用teacup实用程序将SASL软件包添加到ActiveTcl安装中。 teacup install SASL应该这样做。该软件包支持通过TLS链接处理的LOGIN和PLAIN SASL机制。

+0

这工作...赏金过期了。当我试图再次获得赏金时,它会使它变成100而不是50?我想出了如何在PowerShell中做到这一点,但我仍然想给你的奖金,如果没有其他原因,你给了我一个明智的答案......我发现这些网站上很罕见。 (我问过问题,我真的很想回答,然后一些如此并且因此关闭了问题,他不喜欢它!这与本网站的整体目的相反。) – NoMoreZealots

+0

我给了你100分,谢谢你的回答。 – NoMoreZealots

+0

谢谢!很高兴能够提供帮助。 – patthoyts

3

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

set sock [socket $that_box 587] 
gets $sock 

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

0

编辑:

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

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

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

另一个问题,你使用的Windows 7的x64分布?

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