Страницы

Поиск по вопросам

четверг, 23 января 2020 г.

smtplib в Python c smtp.yandex.ru

#python #python_3x #smtp


Юзаю Python 3.4.3. Хочу написать простенький скрипт, который будет отсылать на заданный
ящик текстовую информацию. Нашёл : следующий пример. В режиме интерпретатора ввожу:

>>> import smtplib
>>> server = smtplib.SMTP('smtp.yandex.ru', 465)


И на второй строчке интерпретатор наглухо виснет. Для Яндекса инфу о сервере брал отсюда.

UPD: если использовать то же для Gmail:

server = smtplib.SMTP('smtp.gmail.com', 587)


То всё норм. Однако хочется (т.е. имеется ящик) подключаться к Яндексу. Возможно это?

UPD2: если для Яндекса юзать порт 587, то вторая строчка тоже проходит. Однако третья:

server.login("youremailusername", "password")


Приводит к поднятию эксепшена smtplib.SMTPServerDisconnected

UDP3: нашёл этот вопрос. Делаю так:

import smtplib
smtp = smtplib.SMTP_SSL()
smtp.connect('smtp.yandex.ru')


И вываливается ssl.SSLEOFError

UPD4: Нашёл эту ссылку и сделал так:

server = smtplib.SMTP_SSL('smtp.yandex.ru:465')
server.login('login', 'pass')


И всё заработало. Заработало в том смысле, что пришло smtplib.SMTPAuthenticationError
с сообщением, суть которого заключается в том что я веду себя как робот и мне надо
привязать номер мобильного чтобы система перестала видеть во мне робота. Видимо, защита
от подбора пароля.
    


Ответы

Ответ 1



@Xyanight (надеюсь я его позвал): для Gmail import smtplib def sendEMail(text): server = smtplib.SMTP("smtp.gmail.com", 587) server.ehlo() server.starttls() server.login("login", "pass") message = "\r\n".join([ "From: от кого", "To: кому", "Subject: тема", "", str(text) ]) server.sendmail("от кого", "кому", message) server.quit()

Ответ 2



Для яндекса у меня получилось пройти аутентификацию AUTH PLAIN через SSL соединение. Работает такой код: #!/usr/bin/env python3 import smtplib as smtp from getpass import getpass email = input('введите почту: \n') password = getpass('введите пароль: ') dest_email = input('введите адрес получателя: \n') subject = input('тема письма: \n') email_text = input('текст письма: \n' ) message = 'From: {}\nTo: {}\nSubject: {}\n\n{}'.format(email, dest_email, subject, email_text) server = smtp.SMTP_SSL('smtp.yandex.com') server.set_debuglevel(1) server.ehlo(email) server.login(email, password) server.auth_plain() server.sendmail(email, dest_email, message) server.quit()

Ответ 3



У меня вот так заработало для Яндекса: import smtplib email = 'some@mail.ru' password = 'some_pass' server = smtplib.SMTP('smtp.yandex.ru', 587) server.ehlo() # Кстати, зачем это? server.starttls() server.login(email, password) dest_email = 'another@mail.ru' subject = 'Booking from chatbot' email_text = 'Text' message = 'From: %s\nTo: %s\nSubject: %s\n\n%s' % (email, dest_email, subject, email_text) server.set_debuglevel(1) # Необязательно; так будут отображаться данные с сервера в консоли server.sendmail(email, dest_email, message) server.quit()

Комментариев нет:

Отправить комментарий