修改发件人(SMTP)服务器为用户个人配置(已增加模块地址)
-
2013-07-25 制作成模块 下载地址 https://github.com/ccloolcc/sent-email-by-user-config br />由于还不太明白重载的写法,所以直接拷贝的原方法的所有代码,新手轻喷。
需求:openerp所有外发邮件改用每个用户自行配置的邮箱账户进行发送(smtp服务器是同一台且邮箱域名相同)。
1. 设置——数据结构——字段,创建一个字段模型选择res.user,字段类型为char
2. 设置——用户界面——视图,搜索res.users.preferences.form(由于我只想在首选项里看见这个input,所以只改了这个视图),找喜欢的位置添加代码<field name="刚才创建的字段名" password="1"/>(password="1"这里获得了mrshelly大神的帮助,在此鸣谢)
3. 打开文件addons/base/ir/ir_mail_server.py,在441行后添加代码段如下:
smtp_user = smtp_from #邮箱账户强制改成发件人,有点粗暴。注意,这里的smtp_from是别名,并不是用户看见的那个邮箱。据此推断写成下边这样应该更方便。
#smtp_user = self.pool.get('res.users').browse(cr, uid, uid, context=context).email
smtp_password = self.pool.get('res.users').browse(cr, uid, uid, context=context).刚才创建的字段名
我知道我的方法有些粗暴,后续如果官方有升级的话会很麻烦。所以希望有大神可以指点下这样的模块要怎么开发。我在网上搜了模块开发的教程,不过都是新模块,没有设计到对老模块的修改和补充的模块,所以也比较没头绪
PS:刚才调试了一下获取res.users.email的代码,最终发现email字段根本不存在users表中而是在partner这个表里,所以修改获取smtp_user的代码如下:
pid = self.pool.get('res.users').browse(cr, uid, uid, context=context).partner_id._id
smtp_user = self.pool.get('res.partner').browse(cr, uid, pid, context=context).email -
-
[quote author=ccdos link=topic=7412.msg16950#msg16950 date=1373476516]<br / https://github.com/ccdos/into-openerp-addons/tree/master/auto_select_smtp br />
自动选择合适的 smtp
[/quote]
多谢ccdos的模块,需求上还不太合用,不过学习到了方法重载。