0

我正在处理来自该节的信息,其中一个目标是检查是否存在错误并通过电子邮件发送通知。

我能够做的是捕获错误(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"

我还尝试使用“错误”节中的信息打印日志,但只有一个字段:

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 回答