我正在尝试使用gmail的SMTP服务器 smtp.gmail.com 在Windows中使用C发送邮件。我能够连接到服务器的端口587,但是服务器通过说需要STARTTLS / TLS来响应。是否有用于启动TLS连接的Windows API调用?
我是否应该考虑在C中编写此应用程序或使用Python?
编辑:有没有人能够通过使用Telnet连接到smtp.gmail.com来发送邮件?我得到的是
220 mx.google.com ESMTP g4sm73428740wae.2
HELO hello
502 5.5.1 Unrecognized command. g4sm73428740wae.2
HELO hello.hello
250 mx.google.com at your service
MAIL FROM:a@gmail.com
530 5.7.0 Must issue a STARTTLS command first. g4sm73428740wae.2
STARTTLS
220 2.0.0 Ready to start TLS
MAIL FROM:a@gmail.com
并且连接丢失
答案 0 :(得分:2)
您需要围绕Microsoft的SmtpClient创建一个.NET包装器来创建一个DLL,该DLL可以通过SMTP使用.NET功能进行SSL / TLS支持,或者使用OpenSSL来处理连接。
用C ++编写它可能对你有好处。我不熟悉Python,但我确信有TLS Lite 等库(编辑:见下文,smtplib显然也提供了这个功能)。
编辑:根据您的编辑,您必须拥有一个知道如何处理STARTTLS命令的程序。默认情况下,GMail在所有SMTP连接上都需要安全连接和用户名/密码。您可以连接到端口25,但在初始连接后必须切换到安全端口。这就是为什么当你转到http://mail.google.com时,它会自动切换到https连接。不久前在互联网上对此进行了大量讨论。
答案 1 :(得分:1)
如果您选择用C语言编写,那么您将需要一个像GNU SASL这样的库,它可以启用安全的SMTP身份验证。如果您按照之前的建议选择C ++,那么我会查看VMime,这是一个使用GSASL的免费C ++库。网站上有example,其中显示了如何连接到GMail。
答案 2 :(得分:1)
如果您不想使用OpenSSL或其他第三方SSL / TLS库,则可以使用Microsoft自己的SSPI / SChannel API。它可以在套接字的顶部使用,其中套接字处理字节的低级输入/输出,并且您将字节传入/传出SSPI / SChannel函数以进行处理。