1
我试图用附件使用python代码打开电子邮件,然后将解压后的文件发送到php脚本。使用python在内存中解压缩电子邮件附件,然后在发送请求中发送它
该附件始终是一个zip文件,其中包含一个csv文件。
import requests
import imaplib
import email
import os
from zipfile import ZipFile
# Open zip file and return it with a different name.
def extract_zip(input_zip):
input_zip=ZipFile(input_zip)
return {'file': ('report.csv', input_zip.open(input_zip.namelist()[0], 'r'))}
# Connect to gmail server.
mail=imaplib.IMAP4_SSL('imap.gmail.com')
mail.login("[email protected]","z")
mail.list()
mail.select("inbox")
typ, msgs = mail.search(None, '(SUBJECT "Report")')
msgs = msgs[0].split()
data_file = '';
for emailid in msgs:
resp, data = mail.fetch(emailid, "(RFC822)")
email_body = data[0][1]
m = email.message_from_string(email_body)
if m.get_content_maintype() != 'multipart':
continue
for part in m.walk():
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue
filename=part.get_filename()
if filename is not None:
data_file = extract_zip(filename) # Error Here
# Send the file to a data.php on a localhost,
# Text output should be file content.
http_post_request = requests.post("http://localhost/data.php", files=data_file)
if(http_post_request.status_code != 200):
print 'Error sending POST request'
print http_post_request.text
问题是,该代码需要zip文件名称是该文件的位置/名称的字符串。当我想打开附件时,我不知道该怎么办。
如果我传递文件名,它会给我一个文件未找到的错误。
如何获取附件的路径而不将其保存到磁盘?
对此有帮助吗? https://stackoverflow.com/questions/10908877/extracting-a-zipfile-to-memory – Nullman
答案由Robᵩ[here](https://stackoverflow.com/questions/23569659/extract-zip-to-memory-解析内容)似乎是你在找什么 – Nullman
@Nullman解压缩到内存中的部分工作正常,我只是找不到一个方法来给它的附件,它只返回数据和文件名(不是路径,这可能需要我写入磁盘)。 – Potato