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

标签 c++ ssl smtpclient

注意:如果您没有时间阅读这篇漫长的旅程,解决方案(带源代码)在这里: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++ 或 basic 之类的语言执行此操作的方法时,我遇到了:

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

现在作为主要 socket 工具产品的组件提供,价格仅为其 1/3。这些工具是一流的!是的,一分钱一分货。开发人员 react 迅速并乐于接受建议。他们提供所有类型的 dll,包括一个独立的 .dll,它可以随您的产品一起运送,只有 230k!对于商业解决方案,他们轻而易举地胜出。

SLL/TLS 连接可以显式(握手开始时)或隐式(握手后使用 STARTTLS 等)

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

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

  "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 .

最佳答案

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

关于c++ - 使用 SMTPS (TLS) 通过 gmail (smtp.gmail.com) 发送电子邮件的开源库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1736043/

相关文章:

c++ - 如何使用宏在 C++ 中嵌入调试语句

c++ - 为什么包含未使用的 bool 会影响 char 的引用?

ssl - ListenAndServerTLS 一直失败,错误为 : failed to find any PEM data in certificate input

c# - .Net SMTPClient 在 WAIT_CLOSE 中离开连接

c# - 无法使用 c# SmtpClient 从 Office 365 发送电子邮件

smtpclient - MailMessage 和 SmtpClient 在 Windows 8.1 上失败

c++ - 当我尝试对数组的内容使用函数时,控制台中没有任何显示

c++ - 如何巧妙地编写两个函数 - 一个用于检查解决方案是否存在,另一个用于获取所有解决方案?

PHP 警告 : fgets(): SSL operation failed with code 1

django - 当不使用 TLS/SSL 时,如何在 Django 中删除 HttpRequest 连接?