我登录到一个服务器与我的凭据,我搜索一个电子邮件与特定主题。这个特定的电子邮件有一个附件,我想知道它的文件名和可能的扩展名后。
我在Python中这样做,但每次询问文件名时,它都返回NONE,而实际上附件中有文件名。
from imaplib import *
import base64
import email
import os
import sys
import errno
import mimetypes
server = IMAP4("SERVER LOCATION");
server.login("USER", "PASS");
server.select("Inbox");
typ, data = server.search(None, '(SUBJECT "Hello World")');
for num in data[0].split():
typ, data = server.fetch(num, '(RFC822)');
print (data);
msg = email.message_from_string(str(data[0][1]));
counter = 1
for part in msg.walk():
print (part.as_string() + "\n")
# multipart/* are just containers
if part.get_content_maintype() == 'multipart':
continue
# Applications should really sanitize the given filename so that an
# email message can't be used to overwrite important files
filename = part.get_filename()
print (filename);
fn = msg.get_filename()
print("The Filename was:", (fn));
if not filename:
ext = mimetypes.guess_extension(part.get_content_type())
if not ext:
# Use a generic bag-of-bits extension
ext = '.bin'
filename = 'part-%03d%s' % (counter, ext)
counter += 1
server.close()
server.logout();
我不知道为什么我总是得到一个答案,任何帮助?
4条答案
按热度按时间a14dhokn1#
我遇到了同样的问题,这是我解决它的方法:
yqkkidmi2#
你需要先检查
然后在主for循环中
只是继续的内容类型是目前在邮件正文中,但不需要由你.
您也可以直接检查所需的content_type,然后读取文件名。
ex -我遇到了同样的问题,我的内容类型是 multipart 和 text/html 和 application/json
我没有检查text/html,想阅读“application/json”中的附件。我是直接阅读文件名,因此错误-文件名无来.
当我把支票放进去的时候--”
”“不会出错的。
希望能帮上忙
lx0bsm1f3#
如果你把所有的东西都转储到“part”中,你真的能在那里看到文件吗?
w8f9ii694#
我也遇到了类似的问题。只需要删除if part.get_content_maintype()== 'multipart':继续条件,它会工作得很好。