如何在Python中访问Outlook收件箱中的子文件夹

5

我在Outlook中创建了一条规则,用于将特定发件人的所有收件箱中的邮件移动到我的收件箱的子文件夹中。例如 -

Inbox
- Subfolder

我写了一段代码。
import win32com.client

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

inbox = outlook.GetDefaultFolder(6) #6 = Inbox (without mails from the subfolder)
messages = inbox.Items
message = messages.GetLast()
body_content = message.body 
print body_content #Sometimes has parsing error due to different encoding format

我该如何

1) 阅读收件箱中特定文件夹内的邮件

2) 处理类似UnicodeEncodeError: 'charmap' codec can't encode - character maps to 的错误

print (u'\2109') 也会引发此错误。


你尝试过 body_content.encode('cp1252') 吗? - Jean-François Fabre
@Jean-FrançoisFabre - 打印(u'\2109').encode('cp1252') - 相同的错误 - Prateek Narendra
尝试使用utf-8 - Jean-François Fabre
@Jean-FrançoisFabre - utf-8 可以使用。谢谢。我尝试了 ASCII,但放弃了 :P - Prateek Narendra
3个回答

3

outlook.GetDefaultFolder(6) 默认情况下是“收件箱”。您需要遍历其中的文件夹列表,因此可以尝试以下操作:

inbox = outlook.GetDefaultFolder(6).Folders.Item("Your_Folder_Name")

感谢您提供这段代码片段,它可能会提供一些有限的、即时的帮助。通过展示为什么这是一个好的解决方案,一个适当的解释将极大地提高其长期价值,并使其对未来读者在其他类似问题上更有用。请[编辑]您的答案以添加一些解释,包括您所做出的假设。 - iBug
嗨!你知道是否可以访问子文件夹的子文件夹吗?在邮箱的文件夹列表中,我有一个文件夹,在它下面还有另一个我无法访问的文件夹。 - Julanu
@Jewlanu,你能访问子文件夹吗? - misguided

2

u'\2109' 看起来很像 UTF-8 编码。

所以,print(body_content.encode("utf-8")) 就能解决问题了。


0
outlook = win32com.client.Dispatch('outlook.application')
mapi = outlook.GetNamespace("MAPI")

inbox = mapi.GetDefaultFolder(6).Folders["SubFolder"]
mails = inbox.Items

上述方法也可以起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接