有没有办法向在项目中分配任务的人发送电子邮件,或者在任务完成时向项目经理发送电子邮件?
我正在研究OpenERP v6.1。
感谢您的回复
答案 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'
:
其他触发表达式示例:
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);