如何将json对象发送为电子邮件python

时间:2017-01-04 07:40:35

标签: python json email elasticsearch

我有一个python脚本,它以json的形式获取集群运行状况并向我发送邮件。问题是json打印得不是很好。 这些是我已经尝试过的方法:

  1. 简单 - > json.dumps(健康)
  2. json.dumps(health,indent = 4,sort_keys = True)
  3. 但是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

2 个答案:

答案 0 :(得分:2)

我无法肯定地说,但看起来你的电子邮件发送代码默认发送一个" 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>

看起来&#34;这是一个段落,但它很长,所以我会打破一个新行,并缩进,所以我知道它在p内标签等&#34;给用户。

所以,我说你的两个选择是:

  1. 更改电子邮件发送代码,将Content-type标题发送为text/plain
  2. 将所有空格替换为&nbsp;(不间断空格)字符和换行符<br>(中断),例如:

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

答案 1 :(得分:0)

>>> import json
>>> s = json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)
>>> print s
{
    "4": 5, 
    "6": 7
}
我的工作正常 Python 2.7.3(默认,2015年1月17日,17:10:3​​7) [gCC 3.4.5 20051201(Red Hat 3.4.5-2)] on linux2

也许它的版本相关,发布您的版本和输出