5

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

我正在开发 OpenERP v6.1。

感谢您的回复

4

5 回答 5

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)按摩将由调度程序发送。

希望它会有所帮助。

于 2012-11-09T08:49:34.810 回答
3

解决方案是使用“email_template”模块。安装此模块,您可以在Settings > Configuration > Email > Outgoing Mail Servers. 在这里,您已经设置了发送邮件服务器。然后Settings > Configuration > Email > Templates在此处为您想要的模型添加电子邮件模板。

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

于 2012-11-09T09:22:12.880 回答
2

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

工作流程

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

如果您不熟悉 OpenERP 中的模块开发,这可能会相当复杂。恕我直言,这样一个“明显”的功能很麻烦。

自动操作

这导致我们采用第二种方法:使用base_action_rule模块。不幸的是,事实证明你相当受限于你可以通过模块实现的目标。所以我写了一个扩展,base_action_rule_trigger来简化你想要实现的自动化。

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

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

放

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

设置

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

在此处输入图像描述

其他触发器表达式示例:

  • 负责人从用户 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')
于 2012-11-09T09:11:50.587 回答
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)
于 2012-11-09T08:23:01.713 回答
-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);
于 2012-11-09T01:50:23.940 回答