2012-05-31 32 views
0

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

我已经能够做的就是捕捉错误(或者IqError或IqTimeout)和发送普通电子邮件与书面资料:

except IqTimeout: 
    USERNAME = 'user' 
    PASSWORD = 'password' 
    sender = '[email protected]' 
    receivers = '[email protected]' 
    message = """From: SomeGuy <[email protected]> 
     To: Barbara Shell <[email protected]> 
     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" 

我也tryed打印日志,从信息的“错误”节,但只得到了一个字段:

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

我要的是错误的信息,形成我的节被发送到电子邮件,基本上可以像这样的东西去:

To: [email protected] 
From: [email protected] 
Subject: Alert of an Error 

This is your error: 

RECV: <iq to="[email protected]/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。如果您需要更多信息,我会更愿意回答!

在此先感谢!

问候,

+0

您使用的是什么XMPP库? – MattJ

+0

使用sleekxmpp – BarbSchael

回答

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 

现在,这里是您可能遇到的问题。当您发现​​异常时,e.iq是包含可以像上面那样访问的错误数据的响应节。如果您正在捕捉IqTimeout,那么e.iq就是原始节,它从未收到回复。在这种情况下,从XML中提取数据确实没有错误。当然,你仍然可以得到看起来像错误数据的东西,但这可能是因为在访问e.iq['error']时插入了一个错误元素(如果它不存在的话)。

不要忘记有SleekXMPP相关帮助的[email protected]空间。

- 兰斯

+0

感谢兰斯!现在我怎么输入[email protected]?新的! – BarbSchael

+0

如果使用adium,则选择File> Join Group Chat,然后输入圆滑的房间名称和conference.jabber.org作为服务器。大多数客户以类似的方式运作。 –

相关问题