2017-08-07 42 views
-1

我正在使用Python34通过电子邮件发送消息。消息的一部分是表格。列对齐全部混淆在电子邮件中。下面是一个说明如何,我添加表的消息:如何通过smtplib发送email.message时保持字符串格式?

import email.message 
import smtplib 


rows = [['A','EEEEE','A'], 
['BB','DDDD','BB'], 
['CCC','CCC','CCC'], 
['DDDD','BB','DDDD'], 
['EEEEE','A','EEEEE']] 

msg_text = "" 
for row in rows: 
    msg_text += "{:<8}{:<8}{:<8}\n".format(row[0], row[1], row[2]) 

msg = email.message.Message() 
msg['Subject'] = 'Subject' 
msg['From'] = '[email protected]' 
msg['To'] = '[email protected]' 
msg.add_header('Content-Type','text/plain') 
msg.set_payload(msg_text) 

smtp_connection = smtplib.SMTP('HHHHUB02', 25, timeout=120) 
smtp_connection.sendmail(msg['From'], msg['To'], msg.as_string()) 

print(msg.as_string()) 

它看起来像这样我的终端上: terminal print screen

它看起来像这样在我的邮箱: email print screen

如何通过smtplib发送email.message时保持字符串格式?

+0

的可能的复制[如何通过电子邮件在python发送正确的表?](https://stackoverflow.com/questions/43568771/how-to-send-correctly-a-table-by-email -in-python) – stovfl

+0

感谢您分享该链接。该解决方案虽然不太合适,但需要进行重大改变。首先,它需要目前不是我们分销的一部分的表格软件包。其次,它需要重构我们的代码,因为消息只是部分列表(已经更新了我的问题以突出这一事实)。 –

+0

也许你需要将你的内容类型改为html并指定一个等宽字体。 – khelwood

回答

0

解决方案) 通过下面的代码,我能够在保存表对齐的htlm消息中组合文本和表。

from email.mime.text import MIMEText 
import smtplib 

html_font_style = 'style="font-size: 13px; font-family: calibri"' 

message = '<!DOCTYPE html>\n' 
message += '<html>\n' 
message += '<body>\n' 

text = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \n" 
text += "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB \n" 
text_html = "<p {}> {} </p>\n".format(html_font_style, text.replace('\n', '\n<br /> ')) 

table_html = '<table {}>\n'.format(html_font_style) 

table_data = [['A','EEEEE','A'], 
['BB','DDDD','BB'], 
['CCC','CCC','CCC'], 
['DDDD','BB','DDDD'], 
['EEEEE','A','EEEEE']] 
for data in table_data: 
    table_html += ' <tr>\n' 
    table_html += ' <td> ' 
    table_html += ' </td> <td> '.join(data) 
    table_html += ' </td>' 
    table_html += ' </tr>\n' 
table_html += '</table>\n' 

message = message + text_html + table_html 
message += '</body>\n' 
message += '</html>\n' 

msg = MIMEText(message, 'html') 
msg['Subject'] = 'Subject' 
msg['From'] = '[email protected]' 
msg['To'] = '[email protected]' 

smtp_connection = smtplib.SMTP('HHHHUB02', 25, timeout=120) 
smtp_connection.sendmail(msg['From'], msg['To'], msg.as_string())