簡體   English   中英

使用Python連接到SMTP(SSL或TLS)

[英]Connect to SMTP (SSL or TLS) using Python

我正在嘗試連接到Gmail SMTP郵件服務器,並按照給我的框架代碼所述執行任務。 只允許使用socket s(因此不允許使用smtplib )。 我需要:發送HELO命令, MAIL FROMRCPT TODATA

發布了許多類似問題的案例,但他們沒有得到正確答案。 例如: 在Python中實現傳輸層安全性 - 簡單郵件客戶端

該程序需要通過端口587連接到smtp.gmail.com 我采取了兩種不同的方法:

  1. 使用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.' 
  2. 使用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命令有什么問題嗎?

使用SSL時,您需要連接到端口465而不是端口587.如果您使用STARTTLS,您仍然需要使用ssl.wrap_socket ,您只需稍后再執行 - 特別是在收到對STARTTLS命令的220響應之后。 在做STARTTLS ,你應該再次進行HELO ,因為服務器應該忘記在STARTTLS之前發生的任何事情。

在任何一種情況下,smtp.google.com端口465和587上的服務器仍然不會返回對MAIL命令的250響應,因為它們要求您在發送郵件之前進行身份驗證。 你會收到530響應。 在成功在這些服務器上使用MAIL之前,您需要使用帶有gmail.com憑據的AUTH命令進行身份驗證。

如果您不想進行身份驗證,並且根據您需要執行的操作的詳細信息,您可以嘗試使用gmail.com MX記錄中找到的服務器的端口25。 目前,服務器是gmail-smtp-in.l.google.com並支持STARTTLS。

STARTTLS之后,請致電

clientSocket = ssl.wrap_socket(clientSocket)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM