如何创建使用python从openerp自动发送邮件的程序?
我创建了openerp模块.我正在尝试在生成客户端ID时向客户端发送邮件.
在sale.py中的销售文件夹中.当将导入转换为客户端时,我想向客户端发送邮件.所以在sale.py. 我添加了以下代码行.
self.pool.get('email.template').send_mail(cr, uid, email_template_id, object_id,False, context=context)
Run Code Online (Sandbox Code Playgroud)
我从email_template数据库收到email_Template_id.
解释什么是email_template_id,object_id?什么是模板?什么是留言?
我完全糊涂了.还有其他方法可以自动发送邮件吗?
提前致谢.
Fil*_*ira 10
您可以使用服务器操作来实现此目的.您可以通过访问设置»»技术»»操作»»服务器操作或在模块上创建XML来在OpenERP中创建服务器操作.
我将在这里留下一个服务器操作的示例,当一个对象在我正在开发的模块上达到某个状态时,我用它向用户发送电子邮件:
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<record id="ir_actions_server_send_email_when_closed_nconf" model="ir.actions.server">
<field name="name">Auto-email when request is closed, not confirmed</field>
<field name="model_id" ref="model_generic_request"/>
<field name="state">email</field>
<field name="type">ir.actions.server</field>
<field name="condition">True</field>
<field name="email">object.requestor.email</field>
<field name="subject">Your request object.name has been closed (not confirmed)</field>
<field name="message"><![CDATA[
THIS IS AN AUTOMATED EMAIL. DO NOT REPLY.
Hello,
We are here to inform you that the request [[object.name]] you submitted on [[object.request_date]] with the following data:
| Request - Details
|=========================
| Number: [[object.id]]
|=========================
| Responsible Person: [[object.responsible_name.name]]
| Request description: [[object.request_description]]
| Stating reasons: [[object.stating_reasons]]
|=========================
| Notes: [[object.notes]]
Has not been confirmed and is closed.
If you have any question, do not hesitate to contact your supervisor.
Thank you!]]>
</field>
</record>
</data>
</openerp>
Run Code Online (Sandbox Code Playgroud)
从工作流程调用此操作.在您的情况下,您可以在保存表单时调用它(state = draft,也许?).
因此,您必须在工作流活动定义中添加对服务器操作的调用:
<record model="workflow.activity" id="act_closed_nconf">
<field name="wkf_id" ref="wkf_request" />
<field name="name">request_closed_nconf</field>
<field name="action_id" ref="ir_actions_server_send_email_when_closed_nconf"/>
<field name="kind">function</field>
<field name="action">close_nconf_request()</field>
<field name="flow_stop">True</field>
</record>
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
------对更广泛的答案进行一点编辑-----
好的,我将尝试制作一个简短的功能性示例.
在你的python文件中,如果还没有,你必须添加一些状态才能使工作流程正常工作.
class whatever(osv.osv):
_name='whatever'
_description='whatever'
_columns={
'name': fields.char('whatever', size=64, required=True),
'state': fields.selection([('draft','Draft'),
('sent','Sent'),
('closed','Closed'),
],
'Status', readonly=True, track_visibility='onchange',
),
(... some other fields in here...)
}
_defaults={
'state': 'draft',
}
#these 3 functions are called by the workflow
def draft(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state': 'draft'})
return True
def send(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state': 'sent'})
return True
def close(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state': 'closed'})
return True
whatever()
Run Code Online (Sandbox Code Playgroud)
然后,您将需要一个适用于您的对象的工作流定义,这将是您的xml的内容:
<?xml version="1.0"?>
<openerp>
<data>
<record model="workflow" id="wkf_whatever">
<field name="name">whatever.wkf</field>
<field name="osv">whatever</field>
<field name="on_create">True</field>
</record>
<!-- activities -->
<record model="workflow.activity" id="act_draft">
<field name="wkf_id" ref="wkf_whatever" />
<field name="flow_start">True</field>
<field name="name">draft</field>
<field name="action_id" ref="send_automatic_email"/>
<field name="kind">function</field>
<field name="action">draft()</field>
</record>
<record model="workflow.activity" id="act_send">
<field name="wkf_id" ref="wkf_whatever" />
<field name="name">send</field>
<field name="kind">function</field>
<field name="action">send()</field>
</record>
<record model="workflow.activity" id="act_close">
<field name="wkf_id" ref="wkf_whatever" />
<field name="flow_stop">True</field>
<field name="name">close</field>
<field name="kind">function</field>
<field name="action">close()</field>
</record>
<!-- transitions -->
<record model="workflow.transition" id="whatever_t1">
<field name="act_from" ref="act_draft" />
<field name="act_to" ref="act_send" />
<field name="signal">draft</field>
</record>
<record model="workflow.transition" id="whatever_t2">
<field name="act_from" ref="act_send" />
<field name="act_to" ref="act_close" />
<field name="signal">close</field>
</record>
</data>
</openerp>
Run Code Online (Sandbox Code Playgroud)
<field name="action_id" ref="send_automatic_email"/>活动声明中的行调用id为"send_automatic_email"的服务器操作
而你的动作服务器:
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<record id="send_automatic_email" model="ir.actions.server">
<field name="name">Send automatic email</field>
<field name="model_id" ref="model_whatever"/>
<field name="state">email</field>
<field name="type">ir.actions.server</field>
<field name="condition">True</field>
<field name="email">object.requestor.email</field>
<field name="subject">Your whatever: object.name has been created</field>
<field name="message"><![CDATA[
THIS IS AN AUTOMATED EMAIL. DO NOT REPLY.
Hello,
bla bla bla bla
In here you will write whatever you want, and can access to data stored in your database with, for example [[object.name]] to access the field "name"
</field>
</record>
</data>
</openerp>
Run Code Online (Sandbox Code Playgroud)
有了这3个文件(以及它的一些变化!),你应该能够做你想要的.
不要忘记,您必须重新启动OpenERP服务器(为了重新编译python文件中的更改)并更新模块以加载XML文件!
祝好运!
- 差点忘了!
在xml视图文件中,您必须在表单视图中添加这些按钮以调用工作流操作:
<header>
<button name="send" class="oe_highlight" string="Send" type="workflow" states="draft"/>
<button name="close" class="oe_highlight" string="Close" type="workflow" states="sent"/>
<field name="state" widget="statusbar" statusbar_visible="draft,sent,closed" />
</header>
Run Code Online (Sandbox Code Playgroud)