python - 使用 python 下载电子邮件附件时出错
问题描述
我得到的错误说:
- IOError:[Errno 2] 没有这样的文件或目录:'Users/nithinpathak/Documents/Automate/attachments/Payment Advice Note from 06/28/2018.PDF'。我了解该错误是因为 python 无法检测到该文件。但不确定代码的哪一部分是错误的
我使用以下代码下载附件
import imaplib, email, os
map_url = 'imap.gmail.com'
attachment_dir='Users/nithinpathak/Documents/Automate'
con = imaplib.IMAP4_SSL(imap_url)
con.login(user, password)
con.select('INBOX')
result, data = con.fetch(b'11', '(RFC822)')
raw = email.message_from_string(data[0][1])
get_attachments(raw)
def get_attachments(msg):
for part in msg.walk():
if part.get_content_maintype()=='multipart':
continue
if part.get('Content-Disposition') is None:
continue
fileName = part.get_filename()
if bool(fileName):
filePath = os.path.join(attachment_dir, 'attachments', fileName)
if not os.path.isfile(filePath):
print fileName
fp = open(filePath, 'wb')
fp.wirte(part.get_payload(decode=True))
fp.close()
解决方案
在 Python 中,即使在使用反斜杠作为目录分隔符的 Windows 中,路径名中的斜杠总是被解释为目录分隔符。因此,文件名Payment Advice Note from 06/28/2018.PDF
被解释为 .pdf 的子目录下的文件 2018.PDF Payment Advice Note from 06/28
。您应该简单地将其重命名为不带斜杠的名称。
推荐阅读
- outlook - Outlook 中的同步错误/冲突问题
- javascript - 无法找到解决方案:JSON.parse:第 1 行第 1 列的数据意外结束
- function - F#:应用一个值,就好像它是一个函数一样
- c++ - 如果在 C++ 中将虚拟或非虚拟函数添加到基类中,是否必须重新编译整个类层次结构?
- amazon-cloudformation - 没有自定义域的 AWS 上的 SSL 应用程序负载均衡器
- javascript - execSync 保持不变,不返回任何值
- ios - 这段代码有什么问题?当它在本机地图应用程序中打开时,它会将我带到一个随机位置
- java - 将 Bitmap 或 ImageView 的 Width 和 Height 设置为 CustomView
- python - 是否可以使用矩阵而不是向量作为单热编码器进行分类?
- c# - Mono 上的 ASP.NET MVC 中没有死锁