2017-04-04 39 views
0

Outlookからの最新の電子メールを表示するプログラムがあります。プログラムの実行中に新しい電子メールが受信された場合、その電子メールは更新されず、新しい電子メールが表示されます。どのように私はこれを行うことができます上の任意の提案?win32com OutlookでPythonで電子メールを更新するには?

私のコードは、最新の電子メールに更新されていません。

import win32com.client 
import os 
import threading # use the Timer 

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

inbox = outlook.GetDefaultFolder(6) # "6" refers to the index of a folder - in this case, 
            # the inbox. You can change that number to reference 
            # any other folder 

messages = inbox.Items 
message = messages.GetLast() 
body_content = message.Body 

def timer(): 


    print (body_content) 

    threading.Timer(30, timer).start() 

timer() 

答えて

0

私はCOMライブラリは新しいスレッドで初期化されません発見しました。

def timer(): 

    import pythoncom   # These 2 lines are here because COM library 
    pythoncom.CoInitialize() # is not initialized in the new thread 

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

    inbox = outlook.GetDefaultFolder(6) # "6" refers to the index of a folder - in this case, 
             # the inbox. You can change that number to reference 
             # any other folder 

    messages = inbox.Items 
    message = messages.GetLast() 
    body_content = message.Body 

    os.system('cls' if os.name == 'nt' else 'clear') 
    print (body_content) # orginally used body_content.encode("utf-8") to fixed character encoding issue 
         # caused by Windows CMD. But then figured out you can type 'chcp 65001' in cmd 
    threading.Timer(30, timer).start() # refresh rate goes her 
:だから私は、この作品正しいコードになり

import pythoncom   # These 2 lines are here because COM library 
    pythoncom.CoInitialize() # is not initialized in the new thread 

機能にこれを追加する必要がありました

関連する問題