2013-02-07 32 views
2

我目前正在爲OpenERP 6.1.1(python 2.7)開發一個模塊,其中電子郵件通知應由多個工作流程狀態更改觸發。到目前爲止,如此明顯。當我配置ir.mail_server的實例,並要測試它,我得到以下異常:smtplib,unicode和OpenERP核心的問題

Server Traceback (most recent call last): 
    File "/opt/openerp61/server/openerp/addons/web/common/http.py", line 592, in send 
    result = openerp.netsvc.dispatch_rpc(service_name, method, args) 
    File "/opt/openerp61/server/openerp/netsvc.py", line 360, in dispatch_rpc 
    result = ExportService.getService(service_name).dispatch(method, params) 
    File "/opt/openerp61/server/openerp/service/web_services.py", line 572, in dispatch 
    res = fn(db, uid, *params) 
    File "/opt/openerp61/server/openerp/osv/osv.py", line 167, in execute_kw 
    return self.execute(db, uid, obj, method, *args, **kw or {}) 
    File "/opt/openerp61/server/openerp/osv/osv.py", line 121, in wrapper 
    return f(self, dbname, *args, **kwargs) 
    File "/opt/openerp61/server/openerp/osv/osv.py", line 176, in execute 
    res = self.execute_cr(cr, uid, obj, method, *args, **kw) 
    File "/opt/openerp61/server/openerp/osv/osv.py", line 164, in execute_cr 
    return getattr(object, method)(cr, uid, *args, **kw) 
    File "/opt/openerp61/server/openerp/addons/base/ir/ir_mail_server.py", line 191, in test_smtp_connection 
    smtp_debug=smtp_server.smtp_debug) 
    File "/opt/openerp61/server/openerp/addons/base/ir/ir_mail_server.py", line 241, in connect 
    connection.login(user, password) 
    File "/usr/lib/python2.7/smtplib.py", line 598, in login 
    (code, resp) = self.docmd(encode_cram_md5(resp, user, password)) 
    File "/usr/lib/python2.7/smtplib.py", line 562, in encode_cram_md5 
    response = user + " " + hmac.HMAC(password, challenge).hexdigest() 
    File "/usr/lib/python2.7/hmac.py", line 72, in __init__ 
    self.outer.update(key.translate(trans_5C)) 
TypeError: character mapping must return integer, None or unicode 

這個問題似乎很明顯,作爲傳遞給smtplib.SMTP.login()用戶和密碼參數是採用Unicode編碼,這是HMAC不喜歡的。如果我「修復」OpenERP內核並將這些參數轉換爲字符串,那麼一切似乎都可以正常工作。至少ir.mail_server的「測試連接」功能是這樣說的。

由於我正在使用此項目學習OpenERP以及Python,所以我不知道如何繼續,因爲幾乎沒有任何人提到這個問題。因此,我的猜測是我的開發設置觸發了這個問題,這有些「錯誤」。我可以將核心補丁留在那裏並繼續開發,但這不是一個真正的選擇,因爲這可能會有一天會回來,咬我的屁股。

對此的任何輸入都會很好。

回答

3

你說得對,HMAC不喜歡unicode。您可以應用以下修補程序,前提是您僅在用戶名和密碼中使用ASCII字符。 (你要改線241 /opt/openerp61/server/openerp/addons/base/ir/ir_mail_server.py自己將此)

connection.login(str(user), str(password)) 

有Trac系統中有關該錯誤:

http://bugs.python.org/issue5285