(Tcl)通过gmail和yahoo邮件服务器发送电子邮件



因此,我正试图利用Tcl的smtp、mime和tls包,使我的程序能够通过外部邮件服务器发送电子邮件,如gmail服务器(smtp.gmail.com)和yahoo服务器(smtp.mail.yahoo.com)。我遇到了一个问题:

通过gmail服务器发送电子邮件会给我以下错误:

handshake failed: resource temporarily unavailable
   while executing 
"::tls::handshake $state(sd)"

我正在使用在这里找到的smtp信息:http://email.about.com/od/accessinggmail/f/Gmail_SMTP_Settings.htm

我的代码是这样的:

tls::init -tls1 1;
set token [mime::initialize -canonical text/plain -string $body];
mime::setheader $token Subject "Test Email";
smtp::sendmessage $token -recipients "<my email address here>" -servers "smtp.gmail.com" -ports 587 -username "<my other email address here>" -password "<my password here>" -usetls true -debug 1;
mime::finalize $token;

谷歌自动向我的gmail账户发送了一封电子邮件,上面写着:

We recently blocked a sign-in attempt to your Google Account <my email here>

它还让我可以选择更改"不太安全的应用程序"的安全设置,以允许我的程序使用邮件服务器。所以我做了,然后我的代码运行得很好。我不明白的是,为什么gmail会阻止我发送电子邮件;为什么它认为我的尝试"不太安全",从而迫使我在发送电子邮件之前降低电子邮件帐户的安全设置。也许我的理解不正确,但我相信我在使用tls?tls不是比ssl更安全吗?如果我无论如何都无法连接到gmail,为什么它有tls端口?

编辑:我还尝试将tls::init -tls1 1;更改为tls::init -ssl3 1;,并使用端口465而不是587,但仍然无效。

当我尝试访问雅虎邮件服务器时(信息检索自:http://www.serversmtp.com/en/smtp-yahoo),我得到以下错误:

premature end-of-file from server
  while executing
"smtp::sendmessage $token -recipients "<my email here>" -servers "smtp.mail.yahoo.com" -ports 465 -username "my other email here" -password "<my password>" -usetls true -debug 1;..."

更新我了解到,对于雅虎,你想使用的帐户必须是一个雅虎邮件加帐户,让你做smtp邮件发送。

您是否考虑过这可能不是一个技术限制,而是一个策略限制?由于垃圾邮件发送者几十年的滥用,邮件现在被严重锁定。为了发送基于某个API密钥的加密令牌,可能需要设置一些额外的邮件头,这将允许在不启用该选项的情况下直接访问。只是一点研究就把我带到了这个页面,上面写着:

IMAP和SMTP通过本机IMAP AUTHENTICATE和SMTP AUTH命令使用标准的简单身份验证和安全层(SASL)对用户进行身份验证。SASL XOAUTH2机制使客户端能够为身份验证提供OAuth 2.0凭据。SASL XOAUTH2协议文档非常详细地描述了SASL XOAUTH2机制,并且提供了实现该协议的库和示例。

imap.gmail.com:993的IMAP服务器的传入连接需要SSL。传出SMTP服务器smtp.gmail.com需要TLS。如果客户端在发出STARTTLS命令之前以纯文本开头,请使用端口465或端口587

现在,尽管tcllib中有一个SASL实现,并且smtp包默认使用它,但tcllib没有XOAUTH2机制的实现(您可以通过检查代码来看到——查找::SASL::register),这使得事情又回到了谷歌不太满意的旧机制上。修复这一问题超出了这个答案的范围(但通常情况下,这就是建议"获取编码"的地方,或者至少"提交功能请求")。


我还没能确切地确定雅虎邮件文档中需要什么;我似乎更难搜索…

最新更新