2010-07-19 190 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

相關問題