Отсутствует строка темы в электронном письме, отправленном с использованием smptlib - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь отправить электронное письмо, используя smptlib python, который, кажется, работает нормально, за исключением того, что ключ субъекта не прикрепляется.(image [1]: https://i.stack.imgur.com/XkpLh.png)

Я смотрел на другие решения, но ни одно из них не работает для меня. Они решают в основном текстовые дополнения в виде заголовков, но мой код включает в себя отправку кадра данныхв виде таблицы, которая запутывается, когда я пробую эти решения.

Посты, которые я просмотрел:

Python: «тема» не отображается при отправке электронной почты с использованием модуля smtplib

Строка темы не приходит в SMTP-письме, отправленном с Python

Python smtplib sendmail () не работает с субъектом / телом

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from tabulate import tabulate

sender = 'email@email.com'
recipients = 'email@email.com'
subject = "Test Email 1234"


# Create message container - the correct MIME type is multipart/alternative.
msg = MIMEMultipart()

msg['From'] = sender
msg['To'] = ", ".join(recipients)
msg['Subject'] = subject

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

text = """

text

{table}


text

"""

html = """
<html>
<head>
<style> 
 table, th, td {{ border: 1px solid black; border-collapse: collapse; text-align: center;}}
 th, td {{ padding: 8px; }}


</style>
</head>

<body><p>text </p>
<br><br><br>
{table}
<br><br><br>
<p>Regards,</p>
<p>abc</p>
</body></html>
"""


col_list = list(df.columns.values)
data = df
# above line took every col inside csv as list
text = text.format(table=tabulate(data, headers=col_list, tablefmt="grid"))
html = html.format(table=tabulate(data, headers=col_list, tablefmt="html"))




msg = MIMEMultipart("alternative", None, [MIMEText(text), MIMEText(html,'html')])



# Send the message via local SMTP server.
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login("email@gmail.com", "pw")
server.sendmail(sender,recipients, msg.as_string())
server.quit()

1 Ответ

0 голосов
/ 27 декабря 2018

Ваши настройки

msg['From'] = sender
msg['To'] = ", ".join(recipients)
msg['Subject'] = subject

будут перезаписаны, как только вы сделаете

msg = MIMEMultipart("alternative", None, [MIMEText(text), MIMEText(html,'html')])

позже.

Просто переключите их порядок и удалите первый msg = MIMEMultipart().

...