我試圖連接到Gmail SMTP郵件服務器並按照給出的框架代碼執行任務。只允許使用socket
s(所以不能使用smtplib
)。我需要:發送HELO
命令,MAIL FROM
,RCPT TO
和DATA
。使用Python連接到SMTP(SSL或TLS)使用Python
有很多類似的問題發佈,但他們還沒有得到正確的答案。例如: Implementing Transport Layer Security in Python - Simple Mail Client
該程序需要通過端口587
連接到smtp.gmail.com
。我已經採取了兩種不同的方法:
使用STARTTLS:
mailserver = 'smtp.gmail.com' clientSocket = socket(AF_INET, SOCK_STREAM) clientSocket.connect((mailserver, 587)) recv = clientSocket.recv(1024) print recv if recv[:3] != '220': print '220 reply not received from server.' #Send HELO command and print server response heloCommand = 'HELO Alice\r\n' clientSocket.send(heloCommand) recv1 = clientSocket.recv(1024) print recv1 if recv1[:3] != '250': print '250 reply not received from server.' #Send MAIL FROM command and print server response. command = "STARTTLS\r\n" clientSocket.send(command) recvdiscard = clientSocket.recv(1024) print recvdiscard clientSocket.send("MAIL From: email\r\n") recv2 = clientSocket.recv(1024) print recv2 if recv2[:3] != '250': print '250 reply not received from server.'
使用SSL:
clientSocketSSL = ssl.wrap_socket(clientSocket)
然後
clientSocketSSL
取代的clientSocket
所有實例。 STARTTLS行也被刪除,import ssl
被添加到頂部。
當使用第一種方法時,MAIL FROM:
命令沒有返回任何內容。我得到以下輸出:
250 mx.google.com at your service
220 2.0.0 Ready to start TLS
250 reply not received from server.
使用SSL時,我得到了相同鏈接的帖子:
ssl.SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
我失去了一些東西在這裏?我想我最好的選擇是使用TLS,但我不知道如何去做...我的MAIL FROM
命令有什麼問題嗎?
你試過了嗎? [發送具有蟒電子郵件] [1] [1]:HTTP://計算器。com/a/399240/986760 – fayyazkl
@fayyazkl正如我所說我只能使用套接字,而不是smtplib – user1287523
首先在代碼中修改縮進。 –