2

現在、OpenERP 6.1.1 (python 2.7) 用のモジュールを開発しています。このモジュールでは、いくつかのワークフロー状態の変更によって電子メール通知がトリガーされます。これまでのところ、明らかです。ir.mail_server のインスタンスを構成してテストしようとすると、次の例外が発生します。

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() に渡されるユーザーとパスワードの引数は、HMAC が好まない Unicode でエンコードされているため、問題は明らかです。OpenERP コアを「修正」し、これらの引数を文字列にキャストすると、すべて正常に動作するように見えます。少なくとも ir.mail_server の「テスト接続」機能はそう言っています。

私はこのプロジェクトで OpenERP と Python を学んでいるので、この問題を抱えている他の人への言及がほとんどないため、どのように進めればよいかわかりません。したがって、この問題を引き起こす開発セットアップに「問題」があると思います。そこにコアパッチを残して開発を続けることもできますが、これは実際にはオプションではありません。

これに関する任意の入力は素晴らしいでしょう。

4

1 に答える 1

3

そうです、HMAC はユニコードが好きではありません。ユーザー名とパスワードに ASCII 文字のみを使用する場合は、次の修正を適用できます。/opt/openerp61/server/openerp/addons/base/ir/ir_mail_server.py(これを適用するには、自分の 241 行目を変更する必要があります)

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

これに関して Trac にバグがあります:

http://bugs.python.org/issue5285

于 2013-06-24T14:20:25.017 に答える