Python:解析带有嵌入图像的电子邮件

标签 python email smtp

我正在开发一个应用程序,它使用 python POP3 库连接到邮件服务器,解析电子邮件并将它们放入数据库。

我已成功解析文本电子邮件、html 电子邮件和附件。现在,我被电子邮件中包含嵌入图像的电子邮件困住了。服务器正在使用 CID:src 标签中图像的一些代码,图像以字节为单位。我不确定如何获取图像并将它们与 CID 映射。

请建议。

提前致谢。

以下是我收到的电子邮件内容:

Content-Type: multipart/alternative; 
               boundary="PHP-alt-e0af773d09fadf5208f69aecffcb4de888824263"

 --PHP-alt-e0af773d09fadf5208f69aecffcb4de888824263
 Content-Type: text/plain

 Hi, testing embedded images email!


 --PHP-alt-e0af773d09fadf5208f69aecffcb4de888824263
 Content-Type: multipart/related; boundary="PHP-related-e0af773d09fadf5208f69aecffcb4de888824263"

 --PHP-alt-e0af773d09fadf5208f69aecffcb4de888824263
 Content-Type: text/html

 <html>
 <head>
 <title>Test HTML Mail</title>
 </head>
 <body>
 <font color='red'>Hai, it is me!</font>
 Here is my picture: 
  <img src="cid:PHP-CID-e0af773d09fadf5208f69aecffcb4de888824263" />
 </body>
 </html>

 --PHP-related-e0af773d09fadf5208f69aecffcb4de888824263
 Content-Type: image/gif
 Content-Transfer-Encoding: base64
 Content-ID: <PHP-CID-e0af773d09fadf5208f69aecffcb4de888824263> 

 iVBORw0KGgoAAAANSUhEUgAAAEYAAAAgCAMAAACYXf7xAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAAwBQTFRF////oNKWY6ZZTnc08/304+P/6/PsRHgpZYpWGHcTWqFWe7pz
WZNFwNa+Q2UqgpZ5JGcZ4ezj7e3/6Oj/tbW62tr/aadiK1sSUHQ6oKeSI0UM5PHkAAAAaZhifHx6
yMjKWHdJY5lbi6yFW5RU0+LSnq2VmZ6Mm8iS8vL/dXVzRERFJVUJrNalcrNtkZGRLnYslsWJ3e3d
7fXwstirWYJB3ergyeTI9vb/iIiIgoKBd6V0np6ce51rU2pDqMqlVVVWTnpFhcN7NTU2RYUqpbWd
rKysOHcn5vbql6eOMWYbMkUi+fn/uOStk6yLZGRm7f7tlLGKOXg20dvNIiIiGUUER4Q0InMcaYtf
3+/e3d3czd7KjY2Nnb6WtdOzKWkmhoaGUJNNjL+FhLt7jLp9IF0Z/v7/0tLRqrijVX9UTmZA+v38
Qko5SW5EVYA9JkwPMzwocnJub7RnfZpy3vPcaGhkhYWDbm5rhISIRoZGN0gxm6aQ/Pz/OYAyXm1V
pKSpeHh2Q1M5oqKgiaZ+dZ1vbqRaTVU4k7GFe6xqpr6c1+rb3uTcfcdx0d3Qk7ePhaJ6cqVsTp5H
xNzA1ezTVotS7e7uv968+v76xtPBPlczm7OVydfDdK1t+fn7+vT91NTddpRpVmNBlLyUgKRymZmW
u9a5dati9vr35eXugrFzTVY2/v//R5M5ial+zdbJcJJn8/jz+f73SV89EREReL1vob2TUVw7orGX
YmtU///+YYZNkaKGmdKUR106iIiD9/b5VWxNmbWOudy0j4+N+//9/v/8Dw8Pd5xnf3+INF8Yjp2D
frZ2cHB30ufZb3Bt2+HY3e3WqKqiLjcrUW09q8+xLmowOXAhmbiI4+Xnjr6P5O/n5/DkeK9mQEBE
8vf5//r/9fT4U5Q9hcqGlNKNDh0FlJSXA0UAC1cJGl0KWaZQwc69yN3K/f76drVuQn0iLTkZeJds
lq+Pv9HBN1YtV21Fkb6Bkb6KmLSHtNC5t9y5DikEhLZ/W3BLMEoddqVi4vfk////U8M4kgAAAQB0

最佳答案

我假设您正在使用 Python 的 email包裹?它应该可以很好地处理图像。如果您需要自己解码图像,则需要查看编码,在本例中为 base64。有一个module for encoding and decoding base64在标准库中也是如此。
至于映射,只需从图像中获取 Content-Id header ,创建一个将内容 ID 映射到 mime 部分的字典。要解析 src 中的 URL,请检查它们是否以 'cid:' 开头(即解析为内部 mime 文档),去掉前缀并在您之前创建的字典中查找它们。

关于Python:解析带有嵌入图像的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4332400/

相关文章:

python - sklearn中KMeans的变换是否可以逆转?

html - 显示与浏览器不同的简单电子邮件 CSS

ruby-on-rails - 是否有插件或 gem 可以帮助我在 rails 中执行 "invite a friend"功能?

ruby-on-rails - 使用设计和 Gmail smtp 服务器发送邮件

php - 当用户使用 Laravel 提交联系表单时接收电子邮件

python - 对数据进行分组并减去第一个和最后一个值(或较高值和较低值)

python - 如何启用 NewRelic Python 代理?

python - 一次运行多个 unittest 测试文件

email - 如何使用 imap 命令获取带有部件号的邮件结构

python - SMTP getpass.getpass() 不接受输入,你能解决这个问题吗?