В моем сценарии электронной почты python, работающем в bash, после попытки его запуска он выдает мне ошибку «электронное письмо не является пакетом». Любые идеи? - PullRequest
0 голосов
/ 16 июня 2020

Я обнаружил, что это письмо отправляет python скрипт для использования в bash, и я нигде не могу найти помощи, связанной с этим, так что это скрипт:

FROM = "example"
TO = ["example"] # must be a list

SUBJECT = "Subject"
TEXT = "Your Text"

# Prepare actual message
message = """From: %s\r\nTo: %s\r\nSubject: %s\r\n\

%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)

# Send the mail
import email
import smtplib
server = smtplib.SMTP(smtp.example.com)
server.sendmail(FROM, TO, message)
server.quit()

моя цель - получить это сценарий запускается в bash и отправляет электронное письмо получателю. ошибка, которую я получаю при запуске этого после замены «примера» точными электронными письмами:

ImportError: No module named 'email.utils'; 'email' is not a package

EDIT: вот что выводится:

    """ % (FROM, ", TO, SUBJECT, TEXT)
                                     ^
SyntaxError: EOL while scanning string literal
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 21, in <module>
    from urllib.request import urlopen
  File "/usr/lib/python3.5/urllib/request.py", line 86, in <module>
    import email
  File "/home/user/email.py", line 15, in <module>
    import smtplib
  File "/usr/lib/python3.5/smtplib.py", line 47, in <module>
    import email.utils
ImportError: No module named 'email.utils'; 'email' is not a package

Original exception was:
  File "mailtest.py", line 21
    """ % (FROM, ", TO, SUBJECT, TEXT)
                                     ^
SyntaxError: EOL while scanning string literal

1 Ответ

1 голос
/ 16 июня 2020

Вот сценарий, который должен дублировать проблему, если вы поместите его в тот же каталог, что и ваша текущая программа.

test.py

import email
print("email module path:", email.__file__)
import smtplib

Я попытался продублировать вашу среду с помощью создание сценария с именем email.py в том же каталоге. Когда я запускаю test.py, я получаю вашу ошибку

~/tmp$ touch email.py
~/tmp$ python test.py
email module path: /home/td/tmp/email.py
Traceback (most recent call last):
  File "test.py", line 3, in <module>
    import smtplib
  File "/home/td/anaconda3/lib/python3.7/smtplib.py", line 47, in <module>
    import email.utils
ModuleNotFoundError: No module named 'email.utils'; 'email' is not a package
~/tmp$ 

Обратите внимание, что путь к модулю электронной почты не соответствует пакету электронной почты python.

...