使用SMTPS(TLS)通过gmail(smtp.gmail.com)发送电子邮件的开源库

时间:2009-11-14 23:59:18

标签: c++ ssl smtpclient

注意:如果您没有时间阅读这段漫长的旅程,那么解决方案(包含源代码)就在这里: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连接

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

2 个答案:

答案 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支持)。