我正在尝试用python开发一个邮件客户端
我能够解析带有附件的电子邮件正文并显示在我的 django 模板中。
现在,当我单击附件名称时,我需要下载附件。
我能找到的只是使用 python 将文件下载到特定文件夹的方法。但是当我单击浏览器上的文件名时,我如何将其下载到系统的默认下载文件夹中
下面是我尝试的代码示例
def download_attachment(request):
if request.method == 'POST':
filename=request.POST.get('filename','')
mid=request.POST.get('mid','')
mailserver = IMAP_connect("mail.example.com",username, password)
if mailserver:
mailserver.select('INBOX')
result, data = mailserver.uid('fetch', mid, "(RFC822)")
if result == 'OK':
mail = email.message_from_string(data[0][1])
for part in mail.walk():
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue
fileName = part.get_filename()
if filename != fileName:
continue
detach_dir = '.'
if 'attachments' not in os.listdir(detach_dir):
os.mkdir('attachments')
if bool(fileName):
filePath = os.path.join(detach_dir, 'attachments', fileName)
if not os.path.isfile(filePath) :
print fileName
fp = open(filePath, 'wb')
fp.write(part.get_payload(decode=True))
fp.close()
return HttpResponse()
您无法从 django 访问系统默认下载文件夹的名称。 这取决于用户在他/她的浏览器设置中决定。 你可以做的是通过设置Content-Disposition
告诉浏览器将文件视为附件,然后它会打开正常的"另存为..."框,默认为下载文件夹。
实现这种情况的一些 django 代码如下所示:
response = HttpResponse()
response['Content-Disposition'] = 'attachment; filename="%s"' % fileName
return response
另请参阅此问题。
下面的代码运行得非常好
def download_attachment(request):
if request.method == 'GET':
filename=request.GET.get('filename','')
mid=request.GET.get('mid','')
mailserver = IMAP_connect("mail.example.com",username, password)
if mailserver:
mailserver.select('INBOX')
result, data = mailserver.uid('fetch', mid, "(RFC822)")
if result == 'OK':
mail = email.message_from_string(data[0][1])
for part in mail.walk():
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue
fileName = part.get_filename()
if filename != fileName:
continue
if bool(fileName):
response = HttpResponse(part.get_payload(decode=True))
response['Content-Disposition'] = 'attachment; filename="%s"' % fileName
return response