我正在尝试回复主题中包含关键字的电子邮件,但我需要通过Outlook完成所有操作。我当前的代码工作正常,但如果它可以直接回复而不是创建新消息会更好。
希望这是正确的问题:)
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
o = win32com.client.Dispatch("Outlook.Application")
inbox = outlook.GetDefaultFolder(6)
def check_mail():
global message
messages = inbox.Items
message = messages.GetLast()
if (message.subject.find('@Bot') != -1 and message.unread and whtlist.find(message.SenderName)!= -1 ):
return 1
else:
return 0
def Read_mail():
global message
global ACTIVE
body_content = message.body
print(bcolors.WARNING+'\n______________________________________________________________________\n'+bcolors.OKGREEN)
print (body_content)
print(bcolors.WARNING+'\n______________________________________________________________________\n'+bcolors.OKGREEN)
for att in message.Attachments:
break
try:
att.SaveAsFile(os.getcwd() + '\\new.xlsx')
print(os.getcwd())
except :
print(bcolors.WARNING+'No Attachment Found'+bcolors.OKGREEN)
message.unread=False
Msg = o.CreateItem(0)
Msg.To = message.SenderEmailAddress
print(bcolors.FAIL+'Reply sent to: {}'.format(message.SenderEmailAddress+bcolors.OKGREEN))
Msg.Subject = 'Autoreply'
Msg.Body = 'I see you {}.\n\nTesting\n-Bot'.format(message.SenderName)
Msg.Send()
答案 0 :(得分:0)
请勿使用Items.GetLast
- 不保证会返回上次收到的电子邮件。除非您明确调用Items.Sort
,否则Items集合不会以任何特定方式排序。在您的特定情况下,请使用Items.Restrict
或Items.Find/FindNext
根据您的条件查找邮件(未读,主题包含特定字词等)。
要获得回复,请致电MailItem.Reply
而不是Application.CreateItem
- 它会返回新的MailItem
对象。