如何从传入的Mailgun路线获取附件?

时间:2015-09-01 13:04:55

标签: python-3.x mailgun aiohttp

我正在使用aiohttp。我有一个处理Mailgun路由数据的api。电子邮件有多个附件。我无法阅读所有附件。它只给我一个。

data就是我收到的。

str(list(data.keys()))为我提供了列表 - ['Content-Type', 'Date', 'Dkim-Signature', 'From', 'Message-Id', 'Mime-Version', 'Received', 'Received', 'Received', 'Subject', 'To', 'X-Envelope-From', 'X-Mailgun-Incoming', 'X-Received', 'attachment-count', 'body-html', 'body-plain', 'from', 'message-headers', 'recipient', 'sender', 'signature', 'stripped-html', 'stripped-signature', 'stripped-text', 'subject', 'timestamp', 'token', 'attachment-1']

当我在电子邮件中发送多个文件时,

str(data.get('attachment-count')给了我2/3/4 - 这很好。但是只有一个键attachment-1

怀疑:

密钥中的attachment-1是否表示data中只有一个文件?

如果有多个文件,这是否意味着键有 - attachment-1attachment-2 ....

如何从电子邮件中检索所有文件?

我试过寻找Mailgun的文档,但没有获得阅读文件的具体帮助。有人可以将我重定向到一些相同的代码。 fromsubject等其他字段就可以了。

我尝试的这个随机的东西也只读取一个文件。但这似乎是错误的。

form_data_content_type = [(v.name, v.content_type, v.filename) if (
        v and hasattr(v, 'content_type') and hasattr(v, 'filename')) else None for v in
                              data.values()]
logger.info("No. of attachments " + str(len(form_data_content_type)) # returns 1 

*更新*

我尝试运行烧瓶服务器并测试了包含多个文件的电子邮件:

print(request.files)打印ImmutableMultiDict([('attachment-2', <FileStorage: 'Screen Shot 2015-09-02 at 10.18.37 am.png' ('image/png')>), ('attachment-1', <FileStorage: 'Screen Shot 2015-09-02 at 10.18.36 am.png' ('image/png')>)])

表明确实有两个文件。

现在aiohttp处理邮件数据的方式肯定存在问题:

打印request.post()只提供一个文件 - 'attachment-1': Field(name='attachment-1', filename='Screen Shot 2015-09-02 at 10.40.18 am.png', file=<_io.BufferedRandom name=10>, content_type='image/png')。没有附件-2,天知道为什么!

1 个答案:

答案 0 :(得分:0)

因为我不熟悉python或aiohttp我不能给你代码示例,但这是它的工作原理。

发表 Mailgun发送一个包含所有相关信息的帖子请求,

<强>文件 它还会发送文件和请求,在php中你可以遍历超级地球$_FILES来检索附件,

内联嵌入式图片
当有人发送内联图片例如myimg.jpg时,您需要将附件映射到嵌入,以及为什么您只看到attachment-1,即使有更多附件,也只有其中一个被嵌入。

'attachment-count' => '3',告诉你有多少附件,在这种情况下为3,在php中你可以在$_FILES,中找到它

content-id-map' => '{"<ii_jgl9284x0_1631307716495e75>": "attachment-1"}',

指向嵌入式img

<img src="cid:ii_jgl9284x0_1631307716495e75" width="190" height="114">