给定 MIME 消息的文本表示,我如何重新创建该消息?

Posted

技术标签:

【中文标题】给定 MIME 消息的文本表示,我如何重新创建该消息?【英文标题】:Given a text representation of a MIME message, how can I recreate the message? 【发布时间】:2013-08-29 07:12:16 【问题描述】:

我有一个 GDB 核心转储,其中包含 MIME 多部分/表单数据请求消息的标头和正文。我需要以某种方式准确地重新创建消息并将其发送到我的服务器,以便我可以调试我的代码崩溃的原因。

消息来自一个相当标准的表单数据页面。所有的内容类型都是 text/plain,除了一个是 image/jpeg。

问题是正文的二进制部分已经有了边界,所以我不能只提取二进制部分并通过内置的 Python MIME 代码自动生成标题。

再次,我需要准确地重新创建初始消息。最简单的方法是什么?

【问题讨论】:

你是什么意思“身体的二进制部分已经有边界”? email.parser.Parser().parsestr(text) 将正确解析具有多部分边界的多部分 MIME 消息。您可以创建一个简单的示例并将其上传到某个地方吗?或者显示您使用的不起作用的代码,以及回溯(或者如果不是异常,则说明失败的地方)? 另外,您所说的“最初的消息到底是怎样的”是什么意思?它可能最初是一堆单独的文件,然后是 Web 浏览器使用的某种内部格式的某种东西(或 Python 的 email.mime 库,或一些 php 库,或其他),然后是 RFC2822文本 MIME 附件。最后一个正是你已经拥有的;前面的没有意义。 让我尝试一个不同的问题:确切地说,您拥有的数据与您想要的数据有何不同? 好的,所以我使用 GDB 创建了正文的二进制转储。我最初使用以下 python 脚本:code import requests # ... # filepath = 'C:\binbin' url = '9.19.145.251:8080' files = 'file': ('userfile', open('binbin' , 'rb')) data = 'account_id': 'root' headers = 'content-type': 'multipart/form-data' res = requests.post(url, files=files, data=data ,标题=标题)code。问题是二进制转储不是原始数据。从捕获时开始,它就已经有了标题和边界。 【参考方案1】:

我可能会使用netcat:

$ nc -q 5 serverhost 80 < message_file.txt

【讨论】:

请仔细阅读问题。我不能亲自发送 MIME 消息——我只有一个包含它的 GDB 核心转储。所以,我有消息的原始标题和正文,都是文本格式。我需要接受这些并生成/发送完全相同的新消息。我已经知道如何使用 TCPDump 捕获流量。另外,我在 Netcat 中找不到对“-q”选项的单一引用。 谢谢@user1765354。我确实非常仔细地阅读了这条消息。我读到 GDB 核心映像“包含 MIME 多部分/表单数据请求消息的标头和正文”。如果你有标题和正文,你还需要什么? 来自我的 ubuntu 12.04 系统的 man nc 手册页:“-q 在标准输入上的 EOF 之后,等待指定的秒数然后退出。如果 seconds 为负数,永远等下去。”

以上是关于给定 MIME 消息的文本表示,我如何重新创建该消息?的主要内容,如果未能解决你的问题,请参考以下文章

通过 LotusScript 发送的 MIME 消息中的多个 To 和 Cc 标头

如何编写多部分 MIME 混合消息以在 Outlook 中正确显示

如何创建 x-pkcs7-signature s/mime 消息?

从 MIME 消息信息创建 EML 文件

在 Python 3 中为 HTTP 请求创建带有二进制组件的多部分 MIME 消息

OpenPop.net 获取实际的消息文本