我在使用Tcl的Pop3 :: open命令中遇到错误

时间:2015-08-14 05:45:48

标签: tcl pop3

我想使用来自Pop3服务器的pop3 Tcl个包来获取电子邮件。

我以这种方式进行

# Check Mail - a pop3 client

package require pop3

proc checkmail { _theHost  _theUser  _thePassword } {
     set h [pop3::open -socketcmd tls::socket \
     $_theHost $_theUser $_thePassword 995]
}

set _theHost "pop.gmail.com"
set _theUser "myusername"     #My email is myusername@gmail.com       
set _thePassword "mypassword"

checkmail $_theHost $_theUser $_thePassword

当我运行tclsh tclfile时,它会显示

invalid command name "tls::socket"
    while executing
"tls::socket pop.gmail.com 995"
    ("eval" body line emphasized text1)
    invoked from within
"eval [linsert $cstate(socketcmd) end $host $port]"
    (procedure "pop3::open" line 74)
    invoked from within
"pop3::open -socketcmd tls::socket  $_theHost $_theUser $_thePassword 995"
    (procedure "checkmail" line 3)
    invoked from within
"checkmail $_theHost $_theUser $_thePassword"
    (file "connection.txt" line 20)

2 个答案:

答案 0 :(得分:1)

pop3软件包默认不包含对加密连接的支持;它知道如何使用它(即,它可以正确地调用tls::socket),但由于这是由二进制包实现的,而你可能正在与未加密的系统进行通信,它&# 39;只是一种软依赖。

通过添加以下内容进行修复:

package require tls
package require pop3之前

。并将tls包添加到您的系统中,如果它尚未存在。

答案 1 :(得分:0)

2016年5月,Gmail POP3仿真服务器不再使用POP3(来自tcllib)/ tls软件包。

问题似乎是在openssl / tls版本级别:openssl v1.0.1k,tcllib v1.15,tls v1.6,tcl v8.6。

TLSv1选项默认为false,您必须启用它

package require tls
tls::init -ssl3 1 -tls1 1