プロジェクトでタスクを割り当てられた人に電子メールを送信する方法、またはタスクが終了したときにプロジェクト マネージャーに電子メールを送信する方法はありますか?
私は OpenERP v6.1 に取り組んでいます。
返信ありがとうございます
プロジェクトでタスクを割り当てられた人に電子メールを送信する方法、またはタスクが終了したときにプロジェクト マネージャーに電子メールを送信する方法はありますか?
私は 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)
スケジューラによって送信されます。
それが役立つことを願っています。
これは2つの方法で行うことができます。
ワークフロー
「バニラ」の方法は、ワークフローを使用することです。ワークフローアクティビティは、到達したときに電子メールを送信するサーバーアクションをトリガーできます。オブジェクトのワークフローを作成する必要があります(例project.task
)。type='object'
ビューの状態ボタンをからに変更することを忘れないでくださいtype='workflow'
。ここに例があります。
OpenERPでのモジュール開発に慣れていない場合、これはかなり複雑になる可能性があります。そして私見では、そのような「明白な」機能には多くの問題があります。
自動化されたアクション
それは私たちにそれを行う2番目の方法につながります: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」の「send mail メソッド」を直接使用できます。
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)
これは、私のプロジェクトの 1 つで使用したものです。おそらく、メール サーバー (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);