#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()
Комментариев нет:
Отправить комментарий