2011-09-08 106 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;>