如何发送一个json对象作为电子邮件python

isr3a4wc  于 2022-11-26  发布在  Python
关注(0)|答案(3)|浏览(209)

我有一个python脚本,它以json的形式获取集群的运行状况,并向我发送一封邮件。问题是json的打印效果不好。以下是我已经尝试过的方法:
1.简单--〉json.dumps(运行状况)

  1. json.dumps(运行状况,缩进=4,排序键=True)
    但是gmail中的输出仍然是未格式化的,有点像这样
    { "active_primary_shards": 25, "active_shards": 50, "active_shards_percent_as_number": 100.0, "cluster_name": "number_of_pending_tasks": 0, "relocating_shards": 0, "status": "green", "task_max_waiting_in_queue_millis": 0, "timed_out": false, "unassigned_shards": 0 }
    邮件已发送到Gmail
ef1yzkbh

ef1yzkbh1#

我不能肯定地说,但看起来你的电子邮件发送代码默认发送一个“HTML”电子邮件,在HTML中连续的空格折叠成一个,这样HTML代码就像:

<p>
    This is a paragraph, but it's long so
    I'll break to a new line, and indented
    so I know it's within the `p` tag, etc.
</p>

向用户显示“这是一个段落,但它很长,所以我将换到新行,并缩进,这样我就知道它在p标记内,等等”。
所以我觉得你有两个选择:
1.更改电子邮件发送代码,将Content-type标头作为text/plain发送,或者
1.将所有空格替换为&nbsp;(不换行空格)字符,将换行符替换为<br>(换行),例如:

email_body = json.dumps(
    health, indent=4, sort_keys=True).replace(' ', '&nbsp;').replace('\n', '<br>')
2g32fytz

2g32fytz2#

>>> import json
>>> s = json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)
>>> print s
{
    "4": 5, 
    "6": 7
}

我的作品罚款Python 2.7.3(默认,一月17 2015,17:10:37)[愚者3.4.5 20051201(红帽3.4.5-2)]在linux 2上
可能与版本有关,请发布您的版本和输出

jexiocij

jexiocij3#

建议的解决方案对我不起作用。我尝试将json pretty打印到一个变量中,我看到了预期的json pretty格式的电子邮件。

import json, pprint
body=json.dumps(message, indent=4) 
pprint.pformat(body, indent=4) # pprint body but assign the output to body variable instead of printing to console. This will introduce new line and other expected characters in the message string body. 
body=body.replace("\n","<br/>") # I just replaced new line with <br/>
message = MIMEText(body, "HTML") # create an MIME message and send the body to intented email recepient.

相关问题