2016-03-31 1 views
0

Ich versuche, auf E-Mails mit einem Schlüsselwort im Betreff zu antworten, aber ich muss alles durch Outlook tun. Mein aktueller Code funktioniert anständig, aber es wäre besser, wenn er direkt antworten könnte, anstatt eine neue Nachricht zu erstellen.Antworten auf E-Mail über Outlook in Python

Hoffentlich ist dies der richtige Ort, fragen diese :)

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

Ich habe es einfacher gefunden, die message.htmlbody, anstatt message.body, vor allem für die Formatierung verwenden. – flyingmeatball

+0

Ich hoffe, es hilft http://stackoverflow.com/questions/31433633/reply-to-email-using-python-3-4 –

Antwort

0

nicht Items.GetLast Verwenden Sie - es ist nicht garantiert das letzte empfangene E-Mail zurückzukehren. Die Items-Auflistung wird nicht in einer bestimmten Weise sortiert, es sei denn, Sie rufen explizit Items.Sort. Verwenden Sie in Ihrem speziellen Fall Items.Restrict oder Items.Find/FindNext, um die Nachricht basierend auf Ihren Kriterien zu finden (ungelesen, Betreff enthält ein bestimmtes Wort usw.).

Um eine Antwort, rufen MailItem.Reply statt Application.CreateItem zu bekommen - es wird das neue MailItem Objekt zurück.

+0

Danke, ich bin mir sicher, dass ich bereits versucht "message.Reply()", aber es funktioniert perfekt jetzt :) –