Объект 'NoneType' не имеет атрибута 'Кодировать' ошибка при прикреплении HTML к электронной почте - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь вложить html в электронные письма с помощью скрипта Python. Я был в состоянии отправить их успешно, однако хотел иметь более организованный код. Я создал функцию, в которой HTML-код находится в виде строки. Однако, кажется, есть проблема с кодировкой, когда я прикрепляю ее к электронному письму. Мне нужна помощь, чтобы понять, где мне нужно установить кодировку.

Я прочитал несколько других постов, касающихся этого сообщения об ошибке, и все они, кажется, добавляют эту строку кода в свою строку.

encode('utf8')

Итак, я попытался прикрепить это туда, где я думаю, что это нужно сделать, но не смог найти никакого успеха.

Это то, что у меня есть

    def EmailTemplate():
    test = """\
    <html>
      <head></head>
      <body>
        <p>Hi!<br>
           How are you?<br>
           Here is the <a href="http://www.python.org">link</a> you wanted.
        </p>
      </body>
    </html>
    """
def SendEmail(me, you):

    # me == my email address
    # you == recipient's email address
    # Create message container - the correct MIME type is multipart/alternative.
    msg = MIMEMultipart('alternative')
    msg['Subject'] = "You've gone over your credit limit"
    msg['From'] = me
    msg['To'] = you

    # Create the body of the message (a plain-text and an HTML version).
    text = ''
    html = EmailTemplate()


    # Record the MIME types of both parts - text/plain and text/html.
    part1 = MIMEText(text, 'plain')
    part2 = MIMEText(html, 'html')

Этот код работалкогда у меня был HTML в виде строки. Однако теперь я добавил функцию, чтобы попытаться сделать то же самое.

Например, это то, что я имел раньше и работал

html = """\
    <html>
      <head></head>
      <body>
        <p>Hi!<br>
           How are you?<br>
           Here is the <a href="http://www.python.org">link</a> you wanted.
        </p>
      </body>
    </html>
    """

Поэтому я попытался повторить это с помощью следующего.

html = EmailTemplate()

Тогда функция имеет вид

def EmailTemplate():
    test = """\
    <html>
      <head></head>
      <body>
        <p>Hi!<br>
           How are you?<br>
           Here is the <a href="http://www.python.org">link</a> you wanted.
        </p>
      </body>
    </html>
    """

Я ожидал, что электронное письмо будет отправлено как обычно, поскольку функция - это то же самое. Однако я получаю это для сообщения об ошибке.

File "H:\Files\Projects\Python\Test\Htmlemail.py", line 34, in SendEmail
    part2 = MIMEText(html, 'html')

File "C:\Users\vanle\AppData\Local\Programs\Python\Python37-32\lib\email\mime\text.py", line 34, in __init__
    _text.encode('us-ascii')
AttributeError: 'NoneType' object has no attribute 'encode'

Поэтому я попытался добавить кодировку к следующей строке кода

part2 = MIMEText(html.encode('utf8'), 'html')

Однако я все еще получаю это сообщение об ошибке


File "H:\Files\Projects\Python\Test\Htmlemail.py", line 34, in SendEmail
    part2 = MIMEText(html.encode('utf8'), 'html')
AttributeError: 'NoneType' object has no attribute 'encode'

1 Ответ

1 голос
/ 18 октября 2019

Ваша EmailTemplate функция не имеет оператора возврата и поэтому присваивает None вашей переменной html. Добавление return test в конец определения EmailTemplate должно решить эту проблему.

def EmailTemplate():
    test = """\
        <html>
          <head></head>
          <body>
            <p>Hi!<br>
               How are you?<br>
               Here is the <a href="http://www.python.org">link</a> you wanted.
            </p>
          </body>
        </html>
        """
    return test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...