在电子邮件正文中发送 JSON 消息,字符串在中途中断
Posted
技术标签:
【中文标题】在电子邮件正文中发送 JSON 消息,字符串在中途中断【英文标题】:Sending a JSON message in body text of email, strings broken in midstream 【发布时间】:2014-04-23 12:01:58 【问题描述】:我希望人们能够从网页中抓取一部分 JSON 并将其通过电子邮件发送给某人。这似乎是不可能的,因为电子邮件系统(例如 gmail)会破坏行,可能会破坏中间的字符串常量......这使得无法解析回来。
我正在寻找一种转换 JSON 的最小方法,以便它在电子邮件有效负载中仍然可读和可识别,然后再进行同样最小的转换。这意味着像 UUENCODING 这样的东西不合适。我希望能够查看它并说“是的,那是 JSON ......主要是。”
看来我有点靠墙了。我可以假设允许多长的行并放入某种换行符:
foo: [10 20],
bar: "some really long string that the email would break\
and we handle the discontinuity with backslash or something"
(更新:this trick 可能更好,它将字符串作为字符串数组传递,然后在收到时加入,但这比我希望的更具侵略性) p>
如果我不想设置已知的行长限制,我不得不假设空格不重要。也许在发送端进行一些后处理步骤以查看字符串内部并用\x20
替换空格,并在读取端进行一些预处理步骤以将字符串之外的所有文字空格折叠为单个空格和所有文字空格字符串内部完全消失了吗? :-/
(顺便说一句,我的数据集的字符串中唯一的空格是空格和换行符。)
总的来说,我想知道是否有人可以想出一个简单的通用技巧来使 JSON 消息在一种介质中继续工作,这种介质在感觉就像它时会抛出换行符。代码越少越好!
【问题讨论】:
【参考方案1】:如果您的电子邮件客户端可以发送 html 电子邮件,您可以将代码包装在 <pre></pre>
标签中
向我的 json gmail 帐户发送 html 电子邮件时似乎可以正常工作。 json 文本看起来会中断,但是当您将 json 复制并粘贴到编辑器甚至控制台中时,它会正确粘贴并可以执行。至少在我使用 Chrome 和 GMail 作为电子邮件客户端进行测试时。
带有<pre></pre>
标签的电子邮件
或者,您可以将 json 包装在 <div></div>
或任何标签中,并设置 white-space:nowrap;
的内联样式,这会将整个 json 放在一个不间断的行上。
使用white-space:nowrap
发送电子邮件
当然,这取决于电子邮件客户端的功能,例如支持 html 和/或 css。
【讨论】:
有趣...我没有意识到它只会“猜测”内容是 html。很高兴知道,虽然听起来有点脆弱;取决于邮件客户端的属性,我猜? 其实它并没有猜到内容是html,它必须使用适当的标题发送,例如:邮件功能中的Content-Type: text/html; charset=ISO-8859-1
(我使用php发送电子邮件,link ),否则它只会作为文本发送。但是,是的,这完全取决于邮件客户端的功能。
我在这个问题中指出,这几乎是不可能的......而且除了是我收到的唯一答案之外,您的答案是唯一可以解决不可能的问题。但是,我选择硬着头皮使用 Base64。这确实提出了人类可读格式的问题,这些格式可以在任意换行符中幸存下来,但仍然可以对字符串进行编码……这本身就是一个潜在的有趣问题?不过,不是 JSON。以上是关于在电子邮件正文中发送 JSON 消息,字符串在中途中断的主要内容,如果未能解决你的问题,请参考以下文章
MailMessage 将字符串作为正文发送,在 Outlook 中没有换行符
在 Golang 中附加文件并通过 SMTP 发送时没有正文部分的电子邮件