2017-06-30 131 views
1

pywin32を使用して電子メール通知を送信するプログラムを作成しています。成功へのパラメータとメソッドを失敗が(文字列値を持つ)の変数である場合は、エラー例外pywin32メソッドで変数パラメータを受け入れる方法

def main(recipient): 
try:  
    mailer = Dispatch("Outlook.Application") 
    msg = mailer.CreateItem(0) 
    msg.To = recipient 
    msg.CC = "" 
    msg.Subject = "EmailTest" 
    msg.Body = "This is most certainly a test" 
    msg.Send() 

    success(msg.Subject, recipient) 
except Exception: 
    failure(msg.Subject, recipient) 

に基づいて、それはエラーを返します:私は例外を作成していますかわからない

Traceback (most recent call last): 
    File "C:\pathtoprogram\thisprogram.py", line 48, in main 
    success(msg.Subject, recipient) 
    File "C:\Users\myuser\AppData\Local\Programs\Python\Python36-32\lib\site-packages\win32com\client\dynamic.py", line 516, in __getattr__ 
    ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1) 
pywintypes.com_error: (-2147352567, 'Exception occurred.', (4096, 'Microsoft Outlook', 'The item has been moved or deleted.', None, 0, -2147221238), None) 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
    File "C:\pathtoprogram\thisprogram.py", line 50, in main 
    failure(msg.Subject, recipient) 
    File "C:\Users\myuser\AppData\Local\Programs\Python\Python36-32\lib\site-packages\win32com\client\dynamic.py", line 516, in __getattr__ 
    ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1) 
pywintypes.com_error: (-2147352567, 'Exception occurred.', (4096, 'Microsoft Outlook', 'The item has been moved or deleted.', None, 0, -2147221238), None) 

が、私は文字列として直接パラメータを入力すると、コードが正常に動作します。

コードの動作はうまくいきますが、メインメソッドから渡すことができる必要があるため、パラメータを変数にする必要があります。

私は同様の問題の解決策を探していましたが、この問題に関連する問題は見つかりませんでした。 msg.Subjectとmsg.Toは実際に文字列値を格納していないようですが、他の代入文のように見えます。多分私が紛失していることは明らかです。 ご協力いただければ幸いです。

私はpython 3.6とpywin32の対応するバージョンを使用しています。

+0

'try'文の前に' recipient'とその型を 'main'の中で印刷しようとしましたか? –

答えて

0

問題は、変数を使用している方法ではありません。あなたはCDO(コラボレーションデータオブジェクト)を参照してくださいmsg.Send()

を呼び出す前にmsg.Subjectの値をチェックすることで、具体的SendメソッドのためのMicrosoftのマニュアルを参照して、これをテストすることができます。

https://msdn.microsoft.com/en-us/library/ms527190(v=exchg.10).aspx

移動を送ります現在のユーザーの送信トレイフォルダへのメッセージ。メッセージングシステムは、送信トレイからメッセージを取得して受信者に転送します。それが搬送された後、メッセージが送信トレイから削除され、saveCopyがあるない限り、削除された*

は、あなたが取得されたエラーメッセージを参照してください。そう

4096, 'Microsoft Outlook', 'The item has been moved or deleted.'

あなたがそれを送信した後でメッセージを削除することができます。

+0

ありがとう!それは本当に便利です!あなたの答えは間違いなく答えになっていますが、新しいコードは新しい例外を発生させますが、その目的を克服しています。プログラムは今、msg.send([saveCopy])で実行されますが、新しい例外が発生すると、失敗モジュールのみが実行されます。私は新しい例外なしでどのようにコードブロックを通過できるのか知っていますか? – Ravioli

関連する問題