Как отправить таблицу юникода, отформатированную по электронной почте, используя python smtplib? - PullRequest
0 голосов
/ 02 мая 2020

Я пытался написать скрипт, в котором я генерирую таблицу на основе ввода данных с помощью модуля python Texttable и с помощью модуля smtplib для отправки электронной почты соответствующему получателю. Проблема в том, что сгенерированная таблица имеет формат Unicode, и когда я отправляю электронное письмо, оно теряет все свое форматирование и отображается набросанным способом. Пожалуйста, помогите мне, как я могу отправить таблицу с правильным форматированием.

Пример вывода таблицы

    +--------------+-------------------------------+----------+
    | Instance ID  |           Job name            | Build no |
    +==============+===============================+==========+
    | i-scsd3wcvcw | IB_QA_CI_AWS_INSTANCE_MONITOR |    59    |
    +--------------+-------------------------------+----------+
    | i-scsd3wcvcw | IB_QA_CI_AWS_INSTANCE_MONITOR |    59    |
    +--------------+-------------------------------+----------+

Пример вывода почты , который я получаю, не в правильном формате

Hi user
Instance couldnt terminate, please delete manually Please find below the instance details
+--------------+-------------------------------+----------+ | Instance ID | Job name | Build no | 
+==============+===============================+==========+ | i-scsd3wcvcw | 
IB_QA_CI_AWS_INSTANCE_MONITOR | 59 | +--------------+-------------------------------+----------+ | 
i-scsd3wcvcw | IB_QA_CI_AWS_INSTANCE_MONITOR | 59 | +--------------+-------------------------------+- 
---------+ 

код начинается здесь

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

table = texttable.Texttable()
table.set_cols_align(["l", "r", "c"])
table.set_cols_valign(["t", "m", "b"])
table.add_rows([["Instance ID","Job name","Build no"],["i-scsd3wcvcw","IB_QA_CI_AWS_INSTANCE_MONITOR","59"],["i-scsd3wcvcw","IB_QA_CI_AWS_INSTANCE_MONITOR","59"]])
a = table.draw()
user= "user"

message = MIMEMultipart("alternative")
message["Subject"] = "AWS instance termination failed"
message["From"] = "xx@xx.com"
message["To"] = "yy@yy.com"
html = """\ <html> <body> <p> Hi %s</p> <p> Instance couldnt terminate, please delete manually\nPlease find below the instance details</p> <p> %s </p></body> </html> """  %(user,a)
part = MIMEText(html.encode('utf-8'), 'html', 'utf-8')
message.attach(part)

server = smtplib.SMTP("xyz.com")
server.sendmail(from,to,message.as_string())
...