2010-07-19 172 views
1

我想使用Gmail的SMTP服务器smtp.gmail.com在Windows中使用C发送邮件。我能够连接到服务器的端口587,但是服务器回应说需要STARTTLS/TLS。是否有任何Windows API调用来启动TLS连接?使用Win API通过Gmail邮件服务器发送邮件

我应该甚至考虑用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:[email protected] 
530 5.7.0 Must issue a STARTTLS command first. g4sm73428740wae.2 
STARTTLS 
220 2.0.0 Ready to start TLS 
MAIL FROM:[email protected] 

和连接丢失

回答

2

你将需要或者围绕微软的SmtpClient一个.NET包装,以创建可通过使用.NET功能的SSL/TLS支持DLL SMTP或使用OpenSSL来处理连接。

这对你来说可能是有益的,用C++编写。我对Python并不熟悉,但我确信有如TLS Lite这样的库(编辑:见下文,smtplib显然也为您提供这个功能)

编辑:根据你的编辑,你必须有一个知道如何处理STARTTLS命令的程序。默认情况下,GMail在所有SMTP连接上都需要安全连接和用户名/密码。您可以连接到端口25,但在初始连接后您必须切换到安全端口。这就是为什么当你去http://mail.google.com时,它会自动切换到https连接。前段时间有人在互联网上对此进行了大讨论。

+0

Pythons smtplib支持TLS开箱即用; http://docs.python.org/library/smtplib.html – 2010-07-20 10:00:11

+0

是的Python中的smtplib工作得很好,但我发现我必须用C写这段代码,除非有一些方法可以用Python编写邮件功能,从我的C代码中调用它。 – Stormshadow 2010-07-21 09:02:30

1

如果您选择使用C编写,那么您将需要一个类似GNU SASL的库,从而启用安全的SMTP身份验证。如果您按照之前的建议选择C++,那么我会看看VMime,这是一个使用GSASL的免费C++库。网站上有一个example,显示如何连接到GMail。

1

如果您不想使用OpenSSL或其他第三方SSL/TLS库,则可以使用Microsoft自己的SSPI/SChannel API。它可以在套接字上使用,套接字处理字节的低级输入/输出,并将字节传入/传出SSPI/SChannel函数进行处理。

+0

感谢提到SSPI SChannel。我发现这个示例代码 - > http://www.coastrd.com/c-schannel-smtp – Stormshadow 2010-07-21 09:00:12