Я пишу это сейчас для задания, но годы назад у меня была такая же проблема, и я просто сдался. Дальнейшие поиски заставили меня попробовать множество вещей, и я не могу пройти мимо части входа.Доступ к Gmail SMTP через Python - проблемы с AUTH
from socket import *
from ssl import *
msg = "\r\n I love computer networks!"
endmsg = "\r\n.\r\n"
clientSocket = socket(AF_INET, SOCK_STREAM)
mailserver = getaddrinfo('smtp.gmail.com',465, AF_INET, SOCK_STREAM, IPPROTO_TCP)[0][4]
clientSocket = wrap_socket(clientSocket)
clientSocket.connect(mailserver)
recv = clientSocket.recv(1024)
print recv
if recv[:3] != '220':
print '220 reply not received from server.'
clientSocket.send('EHLO Nolan\r\n')
recv = clientSocket.recv(1024)
print recv
if recv1[:3] != '250':
print '250 reply not received from server.'
clientSocket.send('AUTH LOGIN ' + 'my Google email'.encode('base64','strict'))
recv = clientSocket.recv(1024)
print recv
print recv.split()[1].decode('base64')
clientSocket.send("my password".encode('base64','strict'))
recv = clientSocket.recv(1024)
print recv
# And onto other tasks
Я нахожусь под впечатлением, мне не нужно STARTTLS
как я начала соединения с помощью SSL. Если я изменю AUTH LOGIN
на AUTH PLAIN
, он не знает, как его декодировать. Если я использую PLAIN
, но не кодирую его, моя программа просто зависает. Если я завершу его с помощью «\ n \ r» (не закодированный), я получаю сломанный канал. Используя приведенный выше код, я получаю запрос пароля.
Затем, отправляя пароль, я получаю 535-5.7.8 Username and Password not excepted.
Это тот же пароль, с которым я вхожу? Я уже настроил свою учетную запись, чтобы разрешить менее безопасные устройства. Двухэтапная аутентификация ... начало процесса, похоже, ориентировано на мобильные телефоны, а не на мое приложение python.
Я изменил EHLO
, чтобы использовать свой IP-адрес, так как я считаю, что RFC 5321 говорит, что так оно и должно быть. Не важно.
Я просмотрел RFC 4954 ...
Я порылся в smtplib
раскрыть "AUTH PLAIN " + encode_base64("\0%s\0%s" % (user,pass),eol='')
Просто висит ... жду ...
Я не имею ни малейшего понятия.
Update
Я изменил smtplib
для вывода каждой строки представлены. Это сбивает с толку меня еще больше:
ehlo [127.0.1.1]
AUTH PLAIN [almost forgot one can decode this base64]==
mail FROM:<[gmail account]>
rcpt TO:<[hotmail account]>
data
quit
Моя AUTH
строка точно такой же, но он висит. И я получаю электронную почту на моей учетной записи hotmail (используя smtplib, а не мой код).
для SSL вам нужно 'SMTP_SSL()', порт '465', и без' STARTTLS() ' – furas
@furas Ну там я идти.Спасибо за информацию –
Спасибо. :) Unfort Я не могу использовать его, поскольку обойду назначение, используя библиотеку, предназначенную для этой задачи ... Но она работает (тихо выходит так, как я предполагаю), что просто означает, что я потерпел неудачу и должен пересмотреть библиотеку и выяснить, что я не делаю. –