在OpenERP中分配或完成任务时发送电子邮件

时间:2012-11-09 01:41:05

标签: openerp

有没有办法向在项目中分配任务的人发送电子邮件,或者在任务完成时向项目经理发送电子邮件?

我正在研究OpenERP v6.1。

感谢您的回复

5 个答案:

答案 0 :(得分:3)

您可以覆盖按钮对象方法

    obj_mail_msg = self.pool.get('mail.message')
    obj_mail_server = self.pool.get('ir.mail_server')
    mail_server_ids = obj_mail_server.search(cr, uid, [], context=context)
    mail_server_record = obj_mail_server.browse(cr, uid, mail_server_ids)[0]
    obj_mail_msg.schedule_with_attach(cr, uid, 
                            email_from, 
                            email_to = [list of email], 
                            subject='Notification for Task',
                            body=tools.ustr(mail_body) or '', 
                            mail_server_id = mail_server_ids[0])

schedule_with_attach 将在(settings > configuration > Email > Massages)中创建按摩,按摩将由调度程序发送。

希望它会有所帮助。

答案 1 :(得分:3)

解决方案是使用'email_template'模块。安装此模块,您可以在Settings > Configuration > Email > Outgoing Mail Servers找到配置。在这里您可以设置外发邮件服务器。然后转到Settings > Configuration > Email > Templates在此处为您想要的模型添加电子邮件模板。

现在继承您的模型并在函数中(您的按钮对象将任务状态更改为完成)添加搜索相应的电子邮件模板,然后使用email_template模块中的send_mail()发送邮件。 / p>

答案 2 :(得分:2)

这可以通过两种方式完成。

<强>工作流

“vanilla”方式是使用工作流程:工作流程活动可以触发在到达时发送电子邮件的服务器操作。您需要为对象创建工作流程(例如project.task)。请记住将视图的状态按钮从type='object'修改为type='workflow'。您可以找到示例here

如果您不熟悉OpenERP中的模块开发,这可能会相当复杂。恕我直言,这种“显而易见”的功能会遇到很多麻烦。

自动操作

这引导我们采用第二种方式:使用base_action_rule模块。不幸的是,事实证明,你相当于你可以用模块实现的目标。所以我写了一个扩展名base_action_rule_trigger来简化这种扩展 您正在努力实现的自动化。

例如,在项目问题关闭时创建通知::

  • 在“设置”模块中,选择菜单“自定义”»“自动操作”,然后创建新的。
  • 在“条件”选项卡中:设置“规则名称”和“对象”字段。
  • 将“已评估的表达式”设置为changed.get('state') == 'done'

Set "Evaluated expression"

  • 在“操作”标签中:设置“电子邮件模板”并选中“立即发送”标志:

set the "E-mail template"

  • 新的“电子邮件模板”模块用于设计和呈现电子邮件:

enter image description here

其他触发表达式示例:

  • 责任从用户X更改为用户Y:old.get('user_id') and new.get('user_id') and old.get('user_id') != new.get('user_id')
  • 新的或未分配的问题:inserting or changed.get('state') == 'draft' or not new.get('user_id')

答案 3 :(得分:0)

您可以使用“email_template”模块发送邮件。首先,您需要为此创建一个模板 如果您不想创建email.template,那么您可以直接使用“mail.message”的“发送邮件方法”。

def send_email(cr, uid, ids, context=None):
    mail_server_obj = self.pool.get('ir.mail_server')
    mail_server_ids = mail_server_obj.search(cr, uid, [], context=context)
    if mail_server_ids:
        mail_message_obj = self.pool.get('mail.message')
        email_from = mail_server_obj.browse(cr, uid, mail_server_ids[0], context=context).smtp_user
        values = {
                'subject': your_subject,
                'body_html': your_body_message,
                'email_from': email_from,
                'email_to': email_to,
                'model': model_name,
                'res_id': ids[0],
                'mail_server_id': mail_server_ids and mail_server_ids[0],
                'date': time.strftime('%Y-%m-%d %H:%M:%S'),
                'state': 'outgoing',
                'subtype': 'html',
            }
            msg_id = mail_message_obj.create(cr, uid, values, context=context)
            if msg_id:
                mail_message_obj.send(cr, uid, [msg_id], context=context)

答案 4 :(得分:-2)

这就是我在其中一个项目中使用的内容。 也许填写邮件服务器(smtp)参数可以解决您的问题。

import javax.mail.*;
import javax.mail.internet.*;
Properties properties = System.getProperties(); 
properties.setProperty("mail.smtp.host", "smtp.gmail.com");
properties.setProperty("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
Session session = Session.getDefaultInstance(properties, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication()    {
        return new PasswordAuthentication(acc, pass);
    }
});
MimeMessage mimeMessage = new MimeMessage(session);

Transport.send(mimeMessage);