Tôi đang cố gắng kết nối với máy chủ thư Gmail SMTP và thực hiện các tác vụ như được nêu trong mã bộ xương được cung cấp cho tôi. Chỉ cho phép sử dụng socket
s (không phải là smtplib
). Tôi cần phải: gửi lệnh HELO
, MAIL FROM
, RCPT TO
và DATA
.Kết nối với SMTP (SSL hoặc TLS) bằng cách sử dụng Python
Có nhiều trường hợp xảy ra sự cố tương tự nhưng chưa nhận được câu trả lời đúng. Ví dụ: Implementing Transport Layer Security in Python - Simple Mail Client
Chương trình được yêu cầu kết nối với smtp.gmail.com
qua cổng 587
. Tôi đã lấy hai cách tiếp cận khác nhau:
Sử dụng 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.'
Sử dụng SSL:
clientSocketSSL = ssl.wrap_socket(clientSocket)
Sau đó
clientSocketSSL
thay thế tất cả các trường hợp củaclientSocket
. Các dòng STARTTLS cũng bị xóa vàimport ssl
được thêm vào trên cùng.
Khi sử dụng phương pháp đầu tiên, lệnh MAIL FROM:
không trả lại bất kỳ thứ gì. Tôi nhận được kết quả như sau:
250 mx.google.com at your service
220 2.0.0 Ready to start TLS
250 reply not received from server.
Khi sử dụng SSL, tôi nhận được giống như các bài liên quan:
ssl.SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Tôi có thiếu cái gì ở đây? Tôi đoán lựa chọn tốt nhất của tôi là sử dụng TLS nhưng tôi không có ý tưởng làm thế nào để đi về điều đó ... là có gì sai với lệnh MAIL FROM
của tôi?
Bạn đã thử điều này chưa? [gửi email với python] [1] [1]: http: // stackoverflow.com/a/399240/986760 – fayyazkl
@fayyazkl như tôi đã đề cập, tôi chỉ có thể sử dụng ổ cắm chứ không phải smtplib – user1287523
Bắt đầu bằng cách sửa lỗi thụt đầu dòng trong mã của bạn. –