![](/img/trans.png)
[英]How to send SMTP email for office365 with python using tls/ssl
[英]Connect to SMTP (SSL or TLS) using Python
我正在嘗試連接到Gmail SMTP郵件服務器,並按照給我的框架代碼所述執行任務。 只允許使用socket
s(因此不允許使用smtplib
)。 我需要:發送HELO
命令, MAIL FROM
, RCPT TO
和DATA
。
發布了許多類似問題的案例,但他們沒有得到正確答案。 例如: 在Python中實現傳輸層安全性 - 簡單郵件客戶端
該程序需要通過端口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
命令有什么問題嗎?
使用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.