所以当我尝试使用Tcl从我公司的本地邮件服务器发送电子邮件时,我遇到了一个奇怪的问题。问题是我编写了有效的代码,但是一旦用TclApp包装它就不能正常工作。我相信我已经包含了所有必要的包裹。
代码:
package require smtp;
package require mime;
package require tls;
set body "Hello World, I am sending an email! Hear me roar.";
#mime info
set token [mime::initialize -canonical text/plain -string $body];
#mail options
set opts {};
#MAIL SERVER + PORT
lappend opts -servers "my_server";
lappend opts -ports 25;
tls::init -tls1 1;
lappend opts -username "someEmail@example.com";
lappend opts -password "somePasswordExample";
#SUBJECT + FROM + TO
lappend opts -header [list "Subject" "This is a test e-mail, beware!!"];
lappend opts -header [list "From" "theFromEmail@example.com"];
lappend opts -header [list "To" "theToEmail@yahoo.com"];
if {[catch {
smtp::sendmessage $token \
{*}$opts \
-queue false \
-atleastone false \
-usetls false \
-debug 1;
mime::finalize $token;
} msg]} {
set out [open "error_log.txt" w];
puts $out $msg;
close $out;
}
puts "Hit enter to continue...";
gets stdin;
exit;
当我运行它并成功收到发送的电子邮件时,这是有效的。 但是当我把它包起来时,却没有。这是包装和执行程序后的输出:
无论出于何种原因,使用TclApp进行包装都会导致我的程序无法进行身份验证。
*更新:我决定尝试用Freewrap包装脚本,看看我是否遇到了同样的问题而且我不知道。如果没有包装或者由Freewrap包装,脚本可以工作,但不是TclApp;这是TclApp中的一个错误还是我只是遗漏了一些明显的东西?
这似乎是一个老问题(上一篇文章):https://community.activestate.com/forum/wrapping-package-tls151
答案 0 :(得分:0)
答案 1 :(得分:0)
我联系了ActiveState,他们能够指出我正确的方向 - this链接到ActiveState论坛上的一个主题也遇到了类似的问题。
我决定运行我用来将我的程序包装在TclApp中的前缀文件 - 我正在使用base-tk8.6-thread-win32-ix86
。运行它会打开一个控制台/ Tcl解释器,它允许我手动搜索我的Tcl电子邮件脚本,我发现前缀文件/解释器本身完全没有意识到我系统上任何软件包的位置而且我需要向auto_path提供我想要的软件包的位置。此外,我从线程中发现我使用的电子邮件脚本需要我没有包含的其他依赖项。即它们自己的依赖项中的sha1, SASL, and otp
。当我得到这些依赖项时,我的脚本通过base-tk8.6-thread-win32-ix86解释器工作,然后通过我的包装程序。
在进行一些研究之后,这些依赖关系是必要的另一个线索是我的脚本会给我一个530: 5.5.1 Authentication Required.
我后来学会了SASL修复了这个 - 但我对网络一无所知所以我不会猜到它
我学到的另一件事是teacup get
和teacup install
之间存在明显差异,这就是为什么我没有正确安装Tcl包而TclApp没有意识到SASL,sha1或otp。
我不明白,也许对这些程序有更深入了解的人可以告诉我,Wish86如何知道脚本的包依赖性并知道在哪里找到它们?直到我尝试在TclApp中查找软件包时才意识到我的系统上甚至没有sha1,SASL等,也没有在我的脚本顶部包含他们的package require
命令, Wish86可以完美地执行我的脚本。令人沮丧的是,很难知道你是否已经满足了那些没有神奇的Wish86解释器的系统的所有依赖性要求,这些解释器只是让一切正常工作(lol。)
在查看了线程的结尾之后,我发现有一个关于TclApp在项目中寻找硬和软依赖关系的深度的讨论。
编辑:添加了更多信息。