注意:如果您没有时间阅读这段漫长的旅程,那么解决方案(包含源代码)就在这里:http://www.coastrd.com/smtps。
很长一段时间,通过远程邮件服务器(通常是网站托管公司)发送电子邮件到SMTP(端口25)对应用程序很容易。打开TCP端口25,发送“HELO ...”等
要使用googles执行此操作,电子邮件服务会给我一个问题,因为他们坚持使用端口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 authentication error (sending email through gmail smtp server)
如果我理解正确,我将需要在我的C ++代码中实现TLS加密,完成所有的握手和协商?
来自C#问题:
sending email with gmail smtp ( secure layer ) in c++
这个库没有这样做
http://johnwiggins.net/jwsmtp/
增加:
很多人只是将stunnel安装为服务,然后将其配置为管理SSL连接
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
答案 0 :(得分:3)
结帐http://sourceforge.net/projects/libquickmail/。 此库可以将带有可选附件的邮件发送给多个收件人。 SMTP传输依赖于libcurl,因此它支持身份验证和TLS等功能。 C API使用起来非常简单。 在Linux(GCC)和Windows(MinGW)上测试,但应该可以在任何可用libcurl的平台上运行。
答案 1 :(得分:2)
您是正确的,您需要在您的应用程序中启用TLS。我建议不要自己这样做,而是调查OpenSSL。
此外,您需要enable SMTP in your account 和 support SMTP authentication才能通过Gmail发送流量。
还有一个duplicate question有一些指针,C# implementation代码可以帮助你。
There is also a library可能比滚动自己更容易使用(尽管它目前没有TLS支持)。