Как это возможно, что я получаю разные результаты в зависимости от того, выполняю ли я оператор кода за оператором или как блок? - PullRequest
2 голосов
/ 07 марта 2019

У меня есть код для отправки электронного письма, если критерии соответствуют:

import datetime
import smtplib

today = datetime.date.today()
email_date = today
items = [1, 2]
gmail_email = "put_your_email_here"
password = "put your password here"

if email_date == today:
    # send email
    sent_from = gmail_email
    sent_to = ['email_1', 'email_2']
    sent_subject = 'Subject of the email'
    sent_body = ("""Hello,

    This is part of a reproducible code

    Kind regards""")

    email_text = """\
    From: %s
    To: %s
    Subject: %s

    %s
    """ % (sent_from, ', '.join(sent_to), sent_subject, sent_body)

    server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
    server.ehlo()
    server.login(gmail_email, password)
    server.sendmail(sent_from, sent_to, email_text)
    server.close()

Однако, если я запускаю весь код, отправляемое письмо имеет пустую тему и пустое тело, и все помещаетсяв «от» письма.

Если я запускаю оператор за оператором (начиная с условного), я получаю электронное письмо правильно.Что мне здесь не хватает?

1 Ответ

3 голосов
/ 07 марта 2019

Это, вероятно, связано с тем, как вы назначаете текстовый блок переменной email_text. Текст с отступом, в то время как электронное письмо должно иметь поля заголовка в начале строки. Попробуйте изменить его на:

        email_text = """\
From: %s
To: %s
Subject: %s

%s
""" %(sent_from, ', '.join(sent_to), sent_subject, sent_body)
...