0

私はスタンザからの情報を処理しています。目標の 1 つは、エラーがあるかどうかを確認し、電子メールで通知を送信することです。

私ができることは、エラー (IqError または IqTimeout のいずれか) をキャッチし、書かれた情報を含む一般的な電子メールを送信することです。

except IqTimeout:
  USERNAME = 'user'
  PASSWORD = 'password'
  sender = 'someguy@myemail.com'
  receivers = 'bshell@myemail.com'
  message = """From: SomeGuy <someguy@myemail.com>
        To: Barbara Shell <bshell@myemail.com>
        Subject: Alert of an Error

        This is a test e-mail message: IqTimeout
        """
        smtpObj = smtplib.SMTP('smtp.sendmail.net', 123)
        smtpObj.login(USERNAME, PASSWORD)
        smtpObj.sendmail(sender, receivers, message)         
        print "Successfully sent email"

また、「エラー」スタンザからの情報をログに出力しようとしましたが、1 つのフィールドしか得られませんでした。

logging.error("Could not register account. Error code: %s" %e.iq['error']['code'])

私が欲しいのは、スタンザから電子メールに送信されるエラーの情報です。これは、基本的に次のようなものです。

To: bshell@myemail.com
From: someguy@myemail.com
Subject: Alert of an Error

This is your error: 

RECV: <iq to="bshell@myemail.net/36457242971338462713453506"    from="chat.test.net" id="3" type="error"><oo xmlns="http://chat.net/profile" /><error code="404" type="cancel"><remote-server-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" /></error></iq>

私はpythonで書いています。さらに情報が必要な場合は、喜んでお答えします。

前もって感謝します!

よろしく、

4

1 に答える 1

0

受信したエラー スタンザを電子メールに含めたい場合は、次の手順を実行するだけです。

except IqError as e:
    ...
    message = """...

    RECV: %s""" % e.iq

エラー データの一部のみを抽出する場合は、次のいずれかを使用できます。

e.iq['error']['code']
e.iq['error']['type']
e.iq['error']['condition']
e.iq['error']['text']

あなたの例では、それぞれ以下を提供します:

'404'
'cancel'
'remote-server-not-found'
"" # Because no human friendly text was included

さて、あなたが直面している問題は次のとおりです。IqError例外をキャッチするe.iqと、上記のようにアクセスできるエラー データを含む応答スタンザになります。IqTimeoutをキャッチしている場合は、応答を受信しなかっe.iq元のスタンザです。その場合、データを抽出するエラー XML は実際にはありません。もちろん、エラー データのように見えるものを取得することもできますが、これは、エラー要素がe.iq['error']まだ存在しない場合、アクセス時にエラー要素が挿入されるためです。

sleek@conference.jabber.orgSleekXMPP 関連のヘルプの余地があることを忘れないでください。

-- ランス

于 2012-06-09T07:43:03.003 に答える