Как прочитать все данные из Python socket.recv ()? - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь отправить почту по протоколу smtp в очень простом, базовом c коде.

import socket

clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

port = 2525

clientSocket.connect(('localhost', port))
clientSocket.settimeout(5)

helo = 'HELO Me'
clientSocket.send(bytes(helo, 'utf-8'))

response = clientSocket.recv(1024).decode('utf-8')
print(f'Response: {response}')

# this response gets printed to the console

print('Succesfully connected via smtp')

mailFrom = 'MAIL FROM: myemail@gmail.com'
clientSocket.send(bytes(mailFrom, 'utf-8'))

response = clientSocket.recv(1024).decode('utf-8')
print(f'Response: {response}')

# here my program is blocked, and eventually gets a timeout

Проблема в том, что когда я получаю ответ, моя программа перестает работать при втором ответе. Я считаю, что мой вызов функции recv () неверен, поскольку, если я изменю первый recv () buffersize , скажем, на 20, он будет работать нормально, поэтому я предполагаю, что в сокете еще остались некоторые данные. Но как мне это прочитать?

...