![](/img/trans.png)
[英]how to download attachments from e-mail and keep original filename? using Python/outlook
[英]How to download Outlook attachments after receiving new mail from specified receiver in python
我创建了一个 python 脚本,用于从指定的发件人下载 Outlook 附件。 一旦收到来自指定发件人的新邮件,我想自动下载 Outlook 附件。 例如,我的发件人在上午 10.30 发送,附件应按时下载。(10.30/10.31)。 这可以使用 VBA 完成吗?
下面是我的邮件附件的下载脚本。
from pathlib import Path
from pyexpat.errors import messages
import win32com.client
import os,sys
import time
import glob
import subprocess
import xlwings as xw
import shutil
#Check existing & create folder
output_dir=Path.cwd() / "Output"
output_dir.mkdir(parents=True,exist_ok=True)
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
print("Success")
inbox.Name
messages=inbox.items
ytemails=[message for message in inbox.Items if
message.SenderEmailAddress.endswith('123@gmail.com')]
i1=0
for message in ytemails:
print("insta =",message)
i1=i1+1
sender=message.Sender
subject = message.Subject
body=message.body
attachments=message.Attachments
print(str(i1))
if(str(sender).__contains__("inqube")):
print("message =",message)
#time.sleep(20)
target_folder=output_dir / str(subject)
if os.path.exists(target_folder):
print(str(target_folder))
print("Error")
elif (target_folder.exists):
print(str(target_folder))
target_folder.mkdir(parents=True, exist_ok=True)
print("step >> "+str(i1))
for attachment in attachments:
print(str(attachment))
attachment.SaveAsFile(target_folder / str(attachment))
谢谢。
如果您需要立即处理传入的电子邮件,则需要处理Application
类的NewMailEx
事件。 对于 Microsoft Outlook 处理的每个收到的项目,此事件都会触发一次。 该项目可以是几种不同的项目类型之一,例如MailItem
、 MeetingItem
或SharingItem
。 NewMailEx
事件在新邮件到达收件箱时触发,在客户端规则处理发生之前。 使用由EntryIDCollection
字符串表示的条目 ID 来调用NameSpace.GetItemFromID方法并处理该项目。
您也可以为收件箱文件夹挂钩Items
类的ItemAdd
事件。 两种方法都有其优点和缺点。
但永远不要遍历文件夹中的所有项目:
ytemails=[message for message in inbox.Items if
message.SenderEmailAddress.endswith('123@gmail.com')]
相反,您需要使用 Items 类的Find
/ FindNext
或Restrict
方法。 这些方法允许获取与您的条件相对应的项目,而无需遍历文件夹中的所有项目。 在以下文章中阅读有关这些方法的更多信息:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.