Python电子邮件.parser发展中

2024-06-16 13:24:27 发布

您现在位置:Python中文网/ 问答频道 /正文

最好的玩法是什么电子邮件.parserPython包?我有一个外部托管的网络服务器,我也可以发送电子邮件,但这个开发过程是非常乏味的,我觉得应该有一些我可以做的本地。在

有人有什么建议吗?在

编辑

我希望能够从电子邮件中提取图像附件,唯一的方法似乎是编写一些代码,将其放到我的web服务器上,给自己发送一些电子邮件,然后检查发生了什么。我希望在当地模仿这个过程。在


Tags: 方法代码图像网络服务器web编辑附件
1条回答
网友
1楼 · 发布于 2024-06-16 13:24:27

你到底想做什么?您当前使用服务器的目的是什么?在

您可以使用email.parser.FeedParser.feed(...)从字符串传入电子邮件。因此,您只需在本地存储一些电子邮件并以这种方式发送它们:

import email.parser
parser = email.parser.FeedParser()

email = '''\
From: Steve <steve@steve.steve>
To: Someone <someone@foo.com>
Subject: Hey what's up

This is a dummy email, no server involved.
'''

parser.feed(email)
msg = parser.close()

print "To:", msg['to']
print "From:", msg['from']
print "Subject:", msg['subject']
print "Body:", repr(msg.get_payload())

输出:

^{pr2}$

编辑:为了回应您关于提取附件(例如图像)的评论,电子邮件附件跟随MIME standard。您可以复制原始电子邮件(取决于您使用的客户机和服务器),也可以按照标准手工构建自己的电子邮件。在

下面是一个PNG文件的示例:

import email.parser
parser = email.parser.FeedParser()

email = '''\
From: Steve <steve@steve.steve>
To: Someone <someone@foo.com>
Subject: Hey what's up
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=_boundary

This is a message with multiple parts in MIME format.

 _boundary
Content-Type: text/plain

This is the body of the message. No mail server involved.

 _boundary
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=test.png;
Content-Transfer-Encoding: base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAA29JREFUeNosU21oW1UYfs459yPJTZY0SZfFtWnXDzs7BMXBRLY/Ey1M
GIp/KlP3cwgOEcThfoj4Z4whMkGnv1ScFoQVRSmr1hWtOh0rY8zRtdOsTZNtTVqTtLlJ7r059/g2
9cLh3nt43+d9Ps5h9vRZgHMwKDCfQ63+1cec+SNcrYxAlocAxZXouK2Q+FEFhr9k2x+9BeXCZwLw
fTB7+n1AmGBSauz+9yeF+PuEtuvJEEs9AQTTIGSgUYQq/QmZnXRabtcHKnX4baUHmpAOWH3mHJQS
guc+OW+m2Ch7+C1gWy/QagCei/aj6YARAjYKUDfPwM2vTcju488zwZtc6TGw0sS7ZrI6yvYcJzYt
3Lr8DYrZKwSQB1WjnL+GmzPjhGSD7X4FRpof4sXx95QeAfftu8O6M/UayxykhiJkdQE/ffURZqcu
kMYVsmAF13/5DpOfnUVzbY5qCmDdB6Gr34/569l9Giq/vaAlQxY5SNP+QbVkI+iX4dcLQD1LHjC4
1RzCvIby/Xmku+MEKiE6Y4KtzRzVhLfwFCzS5y4ROklFHaQNGquRebNtE3Veab9Ntkh7/xIzUhMK
QhSz+wkgPwCRIoB7FKdCOMDQs6cT6XQAkDZNAzIDEbjEJB6hf4eAFaExHULde4A1v4iWzH4r6Ukd
rtuAFaOOsLEVX8vfSoEYtTdqDuwKg2EEoGs+vDvVVc3TM3Mmu3FgcUlg/NsedA1oiFoFWGGHClub
BChNDfWaiYq9E4XbHp57NofBQQmX9y9rdf7QxXDjxoH4Dgm1ox+Rx0+gI7YNVsCAqbM2AcfzoTc8
tKrr8DdOI566Q14ATey+pJXjh8Zi5R/eSAxXOvYOTmH2/FVEe4dgdT6IaLKrzWB9NQ+7uIDq0jz2
7q8g0UXq5kKNcnTkc3b110tIlC682Rv58LTcpVP+PspzcvN6QKr/LaDl03fHkMBjT3OIJQ/L5aOn
ittfPsn++PkiFZrYWTr3cU/y62N+hiOXM1DKSviNLRNFgCPZJ5Dp8cCXJfLFZ8aWO19/kXPps8vT
E2QwhyMNJCqTr/Zrn74TTBcTiBCDTRokQigav0Ga78bXs95Lp0qxw2cMzZOMDtQWwKbTdJWbyoJo
rqYTzpXRuLo2EmaLfWCK1fzMYoU9MrVm7BvzgqmcyeoweKvd958AAwAU0nrZgWbiHgAAAABJRU5E
rkJggg==
 _boundary 
'''

parser.feed(email)
msg = parser.close()

print "To:", msg['to']
print "From:", msg['from']
print "Subject:", msg['subject']
print "Body:", repr(msg.get_payload())
print ""

for payload in msg.get_payload():
    filename = payload.get_filename()
    if filename:
        print "Got an attachment: %r" % filename,
        print "that is %r bytes long." % len(payload.get_payload().decode('base64'))
    else:
        print "Got a message: %r" % payload.get_payload()

当我将该文件写入磁盘时,它是一个有效的PNG文件:

$ python -i x.py
>>> open('x.png', 'wb').write(payload.get_payload().decode('base64'))

$ file x.png
x.png: PNG image data, 16 x 16, 8-bit/color RGBA, non-interlaced

相关问题 更多 >