3 Stimmen

TCL Email Script liefert nicht in Activestate TCL

Ich habe das folgende Skript auf der MAC OSX-Version von TCL ausgeführt, und es hat gut funktioniert, aber es bleibt bei ActiveState TCL auf einem Windows 7-Rechner hängen

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."

Haben Sie eine Idee, was am Activestate-System falsch sein könnte? (Es ist eine Neuinstallation von Activestate, ich habe es vor ein paar Tagen heruntergeladen).

UPDATE: Ich glaube, das Einfrieren ist auf die Firewall des Unternehmens zurückzuführen (ich muss mit jemandem darüber sprechen). WIE AUCH immer, ich komme zwar weiter, wenn ich nicht durch das Firmennetzwerk gehe, aber die Nachricht wird trotzdem nicht zugestellt. Ich erhalte die folgenden Debug-Informationen zurück:

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

Das Skript verwendet dieselben Anmeldeinformationen sowohl auf dem MacOS-Rechner als auch auf dem Windows/Activestate-Rechner, aber die Autorisierung scheint fehlzuschlagen? Irgendwelche weiteren Ideen?

3voto

kostix Punkte 47095

Durch eine Firewall blockiert (oder ein allgemeines Verbindungsproblem mit dem Erreichen des Ports tcp/587 des entfernten Rechners)? Ich würde beginnen mit

set sock [socket $that_box 587]
gets $sock

in einem interaktiven tclsh ( tkcon wird empfohlen). Sie sollten den "HELO"-String vom entfernten Server in einer angemessenen Zeit erhalten (kann ein paar Sekunden dauern).

2voto

patthoyts Punkte 30898

Es sieht so aus, als würden Sie nicht versuchen, sich zu authentifizieren. Auf Ihrem Mac enthält Ihre Tcl-Installation wahrscheinlich das SASL-Paket von Tcllib, während Sie es auf Ihrem Windows-Rechner möglicherweise nicht eingebunden haben. Dass SASL nicht verfügbar ist, ist kein Fehler, da viele Leute sich nicht authentifizieren müssen, aber Sie benötigen es eindeutig. Sie können das teacup Dienstprogramm, um das SASL-Paket zu Ihrer ActiveTcl-Installation hinzuzufügen. teacup install SASL sollte es tun. Das Paket unterstützt die Mechanismen LOGIN und PLAIN SASL, die über eine TLS-Verbindung problemlos funktionieren.

2voto

Pat Jansen Punkte 21

Ich habe mehrere Tage lang versucht, E-Mails sowohl über smtp.gmail.com als auch über mein lokales MS Exchange mit Authentifizierung zu senden, jedoch ohne Erfolg. Schließlich gelang es mir, den unten stehenden Code zu verwenden. Diese Prozedur wurde mit PostgreSQL unter Verwendung von pltclu ausgeführt.

Ich hoffe, es hilft wenigstens einer Person.

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

0voto

Felipe Buccioni Punkte 18085

EDITAR:

Stellen Sie sicher, dass Ihr E-Mail-Programm nicht zu oft nach neuen E-Mails sucht. Wenn Ihr Mailprogramm mehr als einmal alle 10 Minuten nach neuen Nachrichten sucht, kann es sein, dass Ihr Programm wiederholt Ihren Benutzernamen und Ihr Passwort anfordert.

Folgen Sie den Schritten auf Google-Hilfe-Center und entsperren Sie Ihr Google Mail.

Wenn Handshake-Probleme fortbestehen, scheint es eine TLS-Implementierung von Tcl zu sein. Versuchen Sie ein Upgrade und ein Downgrade des Pakets, wenn das nicht funktioniert, schauen Sie nach, ob dort, wo tclsh.exe platziert ist, oder im Bibliothekspfad von tcl, eine ssleay32.dll ist, und sagen Sie mir das.

Eine weitere Frage: Verwenden Sie eine x64-Distribution von Windows 7?

0voto

Ravi Punkte 1

Das kann an den Google-Sicherheitseinstellungen liegen. Bitte gehen Sie zu " https://www.google.com/settings/security/lesssecureapps " und stellen Sie sicher, dass Sie aktivieren. Zugang für weniger sichere Anwendungen . Das hat bei mir funktioniert.

Ravi.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X