Автор Тема: Ошибка при импорте smtplib  (Прочитано 2637 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Ethanol

Ошибка при импорте smtplib
« : 28 Июля 2017, 23:34:08 »
Здравствуйте. Написал по статье тривиальную программу для отправки сообщения на email:

import smtplib
smtpObj = smtp.SMTP('smtp.yandex.ru', 465)
smtpObj.starttls()
smtpObj.login('mark@yandex.ru','mark123')
smtpObj.sendmail("mark@yandex.ru","mark@gmail.com","Hello my friend!")
smtpObj.quit()

Далее запускаю его в python3:
mark@evil:~/Загрузки/Python$ python3 letter.py
Traceback (most recent call last):
  File "letter.py", line 1, in <module>
    import smtplib
  File "/usr/lib/python3.4/smtplib.py", line 47, in <module>
    import email.utils
[b]ImportError: bad magic number in 'email': b'\x03\xf3\r\n'[/b]

Ранее бездумно запускал пару готовых скриптов из инета и после этого при запуске этой же программы мне почему-то вылезало сообщение, которое ссылалось на файл скачанный из инета. Те скрипты я удалил и теперь Python жалуется на "плохое магическое число".

Debian 8.9
p.s.Пробовал загуглить, но даже не знаю. как грамотно сформулировать.
 

Оффлайн ZEN

Re: Ошибка при импорте smtplib
« Ответ #1 : 28 Июля 2017, 23:45:04 »
Цитировать
import smtplib
smtpObj = smtp.SMTP('smtp.yandex.ru', 465)
Что-то тут с кодом не то. Возможно имелось ввиду "import smtplib as smtp", но в принципе ошибка с этим не связана. На python 2.7 код работает?

По стектрейсу видно, что код валится на import smtplib, который пытается в свою очередь подгрузить email.utils. А этот модуль для 2.7 и 3.4 версии отличается:
zen@devel:~$ python -c 'import email.utils; print(email.utils.__file__)'
/usr/lib/python2.7/email/utils.py
zen@devel:~$ python3 -c 'import email.utils; print(email.utils.__file__)'
/usr/lib/python3.4/email/utils.py
zen@devel:~$ diff -q /usr/lib/python2.7/email/utils.py /usr/lib/python3.4/email/utils.py
Файлы /usr/lib/python2.7/email/utils.py и /usr/lib/python3.4/email/utils.py различаются
« Последнее редактирование: 28 Июля 2017, 23:53:38 от ZEN »
Crimea is Ukraine
 
Пользователи, которые поблагодарили этот пост: Ethanol

Оффлайн Ethanol

Re: Ошибка при импорте smtplib
« Ответ #2 : 29 Июля 2017, 08:31:46 »
Попробовал python 2, тоже не нравится:
mark@evil:~/Загрузки/Python$ python letter.py
Traceback (most recent call last):
  File "letter.py", line 1, in <module>
    import smtplib
  File "/usr/lib/python2.7/smtplib.py", line 46, in <module>
    import email.utils
  File "/home/mark/Загрузки/Python/email.py", line 3, in <module>
AttributeError: 'module' object has no attribute 'SMTP'
mark@evil:~/Загрузки/Python$ python2.7 letter.py
Traceback (most recent call last):
  File "letter.py", line 1, in <module>
    import smtplib
  File "/usr/lib/python2.7/smtplib.py", line 46, in <module>
    import email.utils
  File "/home/mark/Загрузки/Python/email.py", line 3, in <module>
AttributeError: 'module' object has no attribute 'SMTP'

В папке со скриптами была ещё папка с именем типа __pycache__ и несколько файлов с расширением .pyc. Я их удалил и снова запустил команду python letter.py и теперь ошибка другая:
mark@evil:~/Загрузки/Python$ python3 letter.py
Traceback (most recent call last):
  File "letter.py", line 2, in <module>
    smtpObj = smtp.SMTP('smtp.yandex.ru', 465)
NameError: name 'smtp' is not defined

Попробовал запустить на ноуте с установленным Python3 и та же ошибка. То есть теперь ошибка в самом коде?
p.s. Да, я не очень умный
« Последнее редактирование: 29 Июля 2017, 09:16:17 от Ethanol »
 

Оффлайн vic5710

 

Оффлайн ZEN

Re: Ошибка при импорте smtplib
« Ответ #4 : 29 Июля 2017, 10:21:36 »
Попробовал запустить на ноуте с установленным Python3 и та же ошибка. То есть теперь ошибка в самом коде?

я об этом выше писал) Вы импортируете модуль smtplib, а работать пытаетесь с просто smtp. Что бы код заработал, нужно немного подправить:
import smtplib
smtpObj = smtplib.SMTP('smtp.yandex.ru', 465)
smtpObj.starttls()
smtpObj.login('mark@yandex.ru','mark123')
smtpObj.sendmail("mark@yandex.ru","mark@gmail.com","Hello my friend!")
smtpObj.quit()
Crimea is Ukraine
 
Пользователи, которые поблагодарили этот пост: Ethanol

Оффлайн Ethanol

Re: Ошибка при импорте smtplib
« Ответ #5 : 29 Июля 2017, 11:20:24 »
Да, отлично! Спасибо.
Только вот почему-то письмо по-прежнему не отправляется. Никаких ошибок не выводит. Ввожу python3 letter.py и всё. Курсор на новую строку, приглашения к вводу нет.
Если останавливаю процесс CTRL+C, то выводит:
mark@evil:~/Загрузки/Python$ python3 letter.py
^CTraceback (most recent call last):
  File "letter.py", line 2, in <module>
    smtpObj = smtplib.SMTP('smtp.yandex.ru', 465)
  File "/usr/lib/python3.4/smtplib.py", line 242, in __init__
    (code, msg) = self.connect(host, port)
  File "/usr/lib/python3.4/smtplib.py", line 323, in connect
    (code, msg) = self.getreply()
  File "/usr/lib/python3.4/smtplib.py", line 369, in getreply
    line = self.file.readline(_MAXLINE + 1)
  File "/usr/lib/python3.4/socket.py", line 371, in readinto
    return self._sock.recv_into(b)
KeyboardInterrupt
Т.е. всё что после ^C
 

Оффлайн ZEN

Re: Ошибка при импорте smtplib
« Ответ #6 : 29 Июля 2017, 12:52:37 »
Попробуй включить debug, добавь строчку "smtpObj.set_debuglevel(1)"

import smtplib
smtpObj = smtplib.SMTP('smtp.yandex.ru', 465)
smtpObj.set_debuglevel(1)
smtpObj.starttls()
smtpObj.login('mark@yandex.ru','mark123')
smtpObj.sendmail("mark@yandex.ru","mark@gmail.com","Hello my friend!")
smtpObj.quit()

хотя бы узнаем на какой стадии процесс останавливается
Crimea is Ukraine
 

Оффлайн Ethanol

Re: Ошибка при импорте smtplib
« Ответ #7 : 29 Июля 2017, 13:40:19 »
Не, всё также зависает.
 

Оффлайн ZEN

Re: Ошибка при импорте smtplib
« Ответ #8 : 29 Июля 2017, 14:47:03 »
Хм... не подключается к хосту:
>>> smtpObj = smtplib.SMTP('smtp.yandex.ru', 465, timeout=10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/smtplib.py", line 256, in __init__
    (code, msg) = self.connect(host, port)
  File "/usr/lib/python2.7/smtplib.py", line 317, in connect
    (code, msg) = self.getreply()
  File "/usr/lib/python2.7/smtplib.py", line 365, in getreply
    + str(e))
smtplib.SMTPServerDisconnected: Connection unexpectedly closed: timed out
Crimea is Ukraine
 

Оффлайн mrgoodvin

Re: Ошибка при импорте smtplib
« Ответ #9 : 31 Июля 2017, 22:48:10 »
Попробовал аналогично, не подключается.
~$ /usr/bin/python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170118] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import smtplib
>>> o = smtplib.SMTP("smtp.gmail.com", 465)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.5/smtplib.py", line 251, in __init__
    (code, msg) = self.connect(host, port)
  File "/usr/lib/python3.5/smtplib.py", line 337, in connect
    (code, msg) = self.getreply()
  File "/usr/lib/python3.5/smtplib.py", line 393, in getreply
    raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed
А вот через ssl работает. SMTP(...) заменить на SMTP_SSL(...), строку starttls() убрать, понятное дело. А вот почему SMTP не работает не понятно.
 

Теги:
     

    Ошибка при устаноке GLEW

    Автор temakonkin

    Ответов: 5
    Просмотров: 2177
    Последний ответ 05 Марта 2015, 20:37:57
    от ihammers
    bash script - ошибка перехода в каталог с тильдой

    Автор sunjob

    Ответов: 18
    Просмотров: 4210
    Последний ответ 27 Октября 2015, 21:43:47
    от vic5710