3

注意:如果你没有时间阅读这个漫长的旅程,解决方案(附源代码)在这里: http: //www.coastrd.com/smtps

长期以来,通过远程邮件服务器(通常在网站托管公司)使用 SMTP(端口 25)发送电子邮件很容易使用应用程序完成。打开一个 TCP 端口 25,发送“HELO ...”等

要做到这一点,使用谷歌的电子邮件服务给了我一个问题,因为他们坚持使用端口 465 SMTPS,即带有 TLS 加密的 SMTP:

http://en.wikipedia.org/wiki/Transport_Layer_Security#How_it_works

在研究使用 C++ 之类的语言或基本风格的语言来做到这一点时,我遇到了:

http://forums.realsoftware.com/viewtopic.php?f=2&t=29542

http://forums.realsoftware.com/viewtopic.php?f=2&t=26959&p=162671#p162671

和一个 Python 问题:

python smtp gmail 身份验证错误(通过 gmail smtp 服务器发送电子邮件)

如果我理解正确,我将需要在我的 C++ 代码中实现 TLS 加密,并完成所有的握手和协商?

从 C# 问题:

在 C++ 中使用 gmail smtp(安全层)发送电子邮件

这个库不这样做

http://johnwiggins.net/jwsmtp/

添加:

很多人只是将 stunnel 安装为服务,然后将其配置为管理 SSL 连接

http://www.stunnel.org/about/

Stunnel 是一个 OpenSSL 包装器。OpenSSL 有一些性能问题(http://josefsson.org/gnutls4win/

“在某些系统上初始化 libgcrypt 需要很长时间,据报道可能需要大约 10 秒。”

并要求:“libeay32.dll”1.35MB +“libssl32.dll”310k +“zlib1.dll”75k

然后是几个商业产品:

http://www.chilkatsoft.com/downloads.asp

该产品主要以 Activex (COM)“dll”的形式提供(需要用户机器上的安装程序来“注册”dll - 另一个糟糕的 .net 想法)。

安装程序加载“ChilkatMime.dll”1.33Mb、“ChilkatCert.dll”1.26MB、“ChilkatUtil.dll”720k。开发人员根本没有兴趣在真正的 C .dll 库上进行合作,该库可以从任何语言(包括 C/C++/BASIC/Python 等)调用。鉴于他们的态度,我并不惊讶他们成为代码生成器的受害者由黑客。

除了俗气的名称和艺术品外,他们的产品价格合理,但我尝试过的产品尽管被告知使用端口 465,但仍连接到端口 25。

相比之下,催化剂的商业选择:

http://www.catalyst.com/products/sockettools/secure/library/index.html

现在可作为主要插座工具产品的组件以 1/3 的价格购买。这些工具是一流的!是的,你得到你所支付的。开发人员反应迅速并乐于接受建议。他们提供所有风格的 dll,包括一个独立的 .dll,它可以随您的产品一起提供,只有 230k!对于商业解决方案,他们赢得了胜利。

可以显式建立 SLL/TLS 连接(一旦握手开始看到)或隐式建立(在握手之后使用 STARTTLS 等)

例如,CodeIgniter 是隐式的(与 Python、asp、php 等中的选项一样) http://codeigniter.com/forums/viewthread/84689/

一旦建立连接,就会存在一个“隧道”,MIME 会话可以通过该“隧道”进行:

  "EHLO " + sLocalHost + CRLF
  "MAIL FROM: " + sMailFrom + CRLF
  "RCPT TO: " + "me@mydomain.com" + CRLF  
  "DATA: Testing, Testing xyz" + CRLF 
  CRLF + "." + CRLF
  "QUIT" 

来自服务器的通常响应。

某些语言会为您处理 MIME 通信(套接字工具、codeigniter 等),您只需输入电子邮件主题、正文和地址,使其非常易于使用

CryptLib 是一个开源解决方案,它可以在仅 1MB(完整编译)中使用 C 风格的 .dll 促进 SSL/TLS 隧道。由于源代码可用,因此可以仅使用您需要的组件来编译 dll 的版本,而这些组件应该比这少一些。

http://www.cs.auckland.ac.nz/~pgut001/cryptlib/download.html

尽管我让库立即工作并询问 MIME 对话框,但作者反应非常迅速。有330页的手册!谢谢你。

该库不是 MTA(邮件传输代理),因此您必须编写上面的 MIME 对话,但它是免费的!

此处提供源代码:http: //www.coastrd.com/smtps

4

2 回答 2

3

查看http://sourceforge.net/projects/libquickmail/。该库可以将带有可选附件的邮件发送给多个收件人。SMTP 传输依赖于 libcurl,因此它支持身份验证和 TLS 等功能。C API 使用起来非常简单。在 Linux (GCC) 和 Windows (MinGW) 上测试,但应该可以在任何提供 libcurl 的平台上工作。

于 2012-08-10T20:58:10.720 回答
2

您是正确的,您需要在应用程序中启用 TLS。我建议不要自己做这件事,而是研究OpenSSL

此外,您需要在您的帐户中启用 SMTP 支持 SMTP 身份验证以通过 Gmail 发送流量。

还有一个重复的问题,其中包含一些指针和一个C# 实现,其中的代码可能可以帮助您。

还有一个库可能比滚动你自己的库更容易使用(尽管它目前不支持 TLS)。

于 2009-11-15T00:08:07.010 回答