Во-первых, как уже упоминалось в моем комментарии, вы перезаписываете msg
здесь:
msg = f'Subject: {subject}\n\n{content}'
На этом этапе MIMEMultipart
объект msg
, используемый для указания, уничтожается, и вы вышлю только эту новую строку. Не удивительно, почему нет вложения: эта строка явно не имеет вложения.
Теперь вам действительно следует использовать новый API модуля email
, как показано в документации . Но поскольку вы уже используете устаревший API (например, класс MIMEMultipart
), вам необходимо преобразовать msg
в строку, как показано здесь :
# This is copied straight from the last link
msg = MIMEMultipart('alternative')
msg['Subject'] = "Link"
msg['From'] = me
msg['To'] = you
...
part1 = MIMEText(text, 'plain') # example attachment
# Attach parts into message container.
# According to RFC 2046, the last part of a multipart message, in this case
# the HTML message, is best and preferred.
msg.attach(part1)
mail.sendmail(
me, you,
msg.as_string() # CONVERT TO STRING
)