2016-01-05 45 views
0

爲了學習目的,我只想使用套接字和SSL庫,所以我設法連接到google.com並登錄到我的帳戶。問題是我沒有設法發送任何電子郵件,我不明白原因。 這是輸出,所以直到DATA一切都是正確的。因此我認爲這個問題必須在.send("DATA"....)之後。 我使用的是python 3,因此我需要每次都去.encode().decode()SMTP&Python&Socket&:無法發送數據

import ssl 
import base64 
from socket import * 
import sys 

cc = socket(AF_INET, SOCK_STREAM) 
cc.connect(("smtp.gmail.com", 587)) 
print(cc.recv(1024).decode()) 

cc.send(('helo tester.com\r\n').encode()) 
print(cc.recv(1024).decode()) 
cc.send(('starttls\r\n').encode()) 
print(cc.recv(1024).decode()) 

############# Authentication ############# 
scc = ssl.wrap_socket(cc, ssl_version=ssl.PROTOCOL_SSLv23) 

scc.send(('auth login\r\n').encode()) 
print(scc.recv(1024).decode()) 

scc.send((base64.b64encode(('[email protected]').encode()))+('\r\n').encode()) 
print(scc.recv(1024).decode()) 

scc.send((base64.b64encode(('********').encode()))+('\r\n').encode()) 
print(scc.recv(1024).decode()) 

############# EMAIL ############# 
scc.send(("MAIL FROM: <[email protected]>" + '\r\n').encode()) 
print(scc.recv(1024).decode()) 
scc.send(("RCPT to: <[email protected]>" + '\r\n').encode()) 
print(scc.recv(1024).decode()) 
scc.send(("DATA" + '\r\n').encode()) 
print(scc.recv(1024).decode()) 
# start to send the Data 
scc.send(("Subject: Test!" + '\r\n').encode()) 
scc.send(("From: [email protected]" + '\r\n').encode()) 
scc.send(("To: [email protected]" + '\r\n').encode()) 
scc.send(("Ciaooone" + '\r\n').encode()) 
scc.send(("'\r\n'.'\r\n'").encode()) 
print(scc.recv(1024).decode()) 
############# Exit ############# 
scc.send(("QUIT" + '\r\n').encode()) 
print(scc.recv(1024).decode()) 

scc.close() 
cc.close() 

OUTPUT:

220 smtp.gmail.com ESMTP bg10sm91176924wjb.46 - gsmtp 

250 smtp.gmail.com at your service 

220 2.0.0 Ready to start TLS 

334 VXNlcm5hbWU6 

334 UGFzc3dvcmQ6 

235 2.7.0 Accepted 

250 2.1.0 OK bg10sm91176924wjb.46 - gsmtp 

250 2.1.5 OK bg10sm91176924wjb.46 - gsmtp 

354 Go ahead bg10sm91176924wjb.46 - gsmtp 

回答

1

scc.send(( 「 '\ r \ N' '\ r \ N'」)進行編碼())

您不會在此發送\r\n.\r\n,就像您可能計劃標記郵件的結尾,但您已發送'\r\n'.'\r\n'即用單引號。

+0

是的,你是可靠的!有用!謝謝 :) – Francesco