Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

'ascii' codec can't encode characters in position 205: ordinal not in range(128)



  • 我在调Send by email的时候,邮件老是发不出去,提示这个错误。估计又是哪个函数不支持Unicode(汉字)了。问题是SMTP Server的错误是在Message Queue中给出的,只有这一句话,OpenERP.log中没有记录,没法知道是哪个模块哪行语句出的错误。

    哪位知道这个错误一般是哪个函数给出的。知道了,我就顺藤摸上去。

    Chip




  • 源码里没有看到哪里有"Send by email"
    只在 项目 是有 "Warn Partner" 的勾选项...



  • 本想要个思路,没想到Shelly这样热心,我就细致地说说,也不枉费Shelly一番热情。

    安装email_purchase模块以后,在“采购订单“的Form中,就会在右侧动作栏中出现"Send by Email"项,按下就会提示一般发邮件要提示的东西(To: XXX, Subject : XXX, Message:  XXX)(见附件:Send purchase order-s by Email.png)。我确认一定出现如题所示的错误的情况是:To : XXX 这里系统会取出名字连同email address构成这样的格式(很多email系统都如此) “To: 史玉柱<shiyuzhu@kingsoft.com>”, 只要 “史玉柱”这里出现中文就会出现标题所示错误。错误会在 “菜单-》系统设置-》设置-》Email Server->Message Queue以一条记录出现,Message Status 会显示error, doule click后,在error tab中显示标题所示错误信息(见附件)。整个操作过程没有任何异常提示,如果"史玉柱"那里是英文或删掉的话,则不会出错。email_sales,email_account 同样问题。

    与此有关的是 addons/email_purchase/wizard/wizard_send_email.py 和 addons/smtpclient/smtpclient.py

    我怀疑问题出在 smtpclient.py 的 _check_queue 里面。

    Chip



  • 看了, 是 smtpclient 不支持这种 Email 地址格式.

    需要对 To:  FROM: 部分进行

    =?utf-8?B?base64 encode?= <email address> 进行处理.



  • 刚看了... SMTP 协议中. 似乎 TO: 部分 只允许标准 的 Email 地址..

    所以修改 to 参数.正则取出 Email 地址. 就OK了.



    1. 照Shelly的方法是可以解决问题的!
      2. Shelly 看贴不仔细: 即使SMTP协议不支持"史玉柱 <shiyuzhu@kingsoft.com>" 这种格式,只要把“史玉柱“这里换成字母(utf-8?),比如“shiyuzhu", 就可以发走的。
      3. 我怀疑 smtpclient.370行:
          self.smtpServer[email.server_id.id].sendmail(str(email.server_id.email), email.to, tools.ustr(email.serialized_message)) 这里的smtplib里的sendmail中的变量to 不支持中文(Unicode?)
      4. 不知何故,我这里SMTP Server 发邮件特别费劲,好几个SMTP server都是这样。老是在那里"Queued"。如果没有改善,发邮件的功能就没法用了。


  • 我是说推荐 在 TO: 后面直接使用Email , 这样也可以减少不必要的耗用.或者有很多写 得差的 SMTP server 不支持的.

    至于 地址的 nickname + <email address> 应该是有相关的 RFC文档的.. 不过,我暂时没有时间去查询提供.你可以检索一下.

    给你一个 邮件的原码的 FROM TO 部分..你应该就知道 如何处理 Unicode 的 邮件nickname 了... 应该是需要处理你的 smtpclient 模块. 或者你的 email_purchase 模块.处理相关的 发件人,收件人 数据.

    <br />......<br />From: &quot;=?gbk?B?zNrRttPKz+S53MDt1LEAIj0/Z2JrP0I/AD89IiAAPA==?=&quot; &lt;10000@qq.com&gt;&nbsp; &nbsp; #&lt;-----这里是 发件人:腾讯邮箱管理员 &lt;10000@qq.com&gt;<br />To: mrxxxxxx@qq.com<br />......<br />
    





  • 所以, 我推荐你 在 调用.sendmail 的时候. 把 email.to 的内容修正一下... 最好不要使用 Quoted Printable 的 Email 地址. 而直接使用 标准的 email 地址格式.

    我怀疑 你的SMTP server 也是在处理这种不标准的邮件而造成的 发送堵塞...