有没有办法向在项目中分配任务的人发送电子邮件或在任务完成时向项目经理发送电子邮件?
我正在开发 OpenERP v6.1。
感谢您的回复
您可以覆盖按钮对象方法,
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)
按摩将由调度程序发送。
希望它会有所帮助。
解决方案是使用“email_template”模块。安装此模块,您可以在Settings > Configuration > Email > Outgoing Mail Servers
. 在这里,您已经设置了发送邮件服务器。然后Settings > Configuration > Email > Templates
在此处为您想要的模型添加电子邮件模板。
现在继承您的模型并在函数中(您的按钮对象更改任务状态以完成)添加搜索相应的电子邮件模板,然后使用send_mail()
email_template 模块中的发送邮件。
这可以通过两种方式完成。
工作流程
“vanilla”方式是使用工作流:工作流活动可以触发服务器操作,在到达时发送电子邮件。您需要为您的对象创建一个工作流(例如project.task
)。请记住将视图的状态按钮从 修改type='object'
为type='workflow'
。你可以在这里找到一个例子。
如果您不熟悉 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')
您可以使用“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)
这是我在我的一个项目中使用的。也许用你的填写邮件服务器(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);