I'm using the following code to send an email notification whenever a new record is created.
@api.model
def create(self,vals):
record = super().create(vals)
def send_email_after_commit():
new_record = self.browse(record.id)
new_record.send_custom_email()
self.env.cr.postcommit.add(send_email_after_commit)
return record
def send_custom_email(self):
template = self.env.ref('crm.email_template_added_to_opp')
# Only send to head if not the same as creator
if self.write_uid.id != self.head_id.id and self.head_id.partner_id:
recipient_ids = [self.head_id.partner_id.id]
email_values = {'recipient_ids': [(6, 0, recipient_ids)], }
template.send_mail(self.id, email_values=email_values)
If I use force_send=True, the email is sent. However, if I don't set it, the email is never sent.
My email cron job is working properly as I have other emails that are sent without a problem.
Email Template
<record id="email_template_added_to_opp" model="mail.template">
<field name="name">Added to Opportunity Notification</field>
<field name="model_id" ref="crm.model_name"/>
<field name="email_from">testam1sales@gmail.com</field>
<field name="subject">Added to New Opportunity: {{object.lead_id.name}}</field>
<field name="body_html" type="html"> <div>
<p>Hello <t t-out='object.bu_head_id.name' />,</p>
<p>You have been added to a new opportunity <strong> <t t-out="object.lead_id.name" /> </strong>. <br/>
<a t-attf-href="#{object.lead_id.get_base_url()}/web#id=#{object.lead_id.id}&model=crm.lead&view_type=form"><span style="background-color:green; color:white; padding:4px 10px;">Open <t t-out="object.lead_id.name" /></span></a></p>
<p><strong>Customer:</strong> <t t-out="object.lead_id.partner_id.name" /> <br/>
<strong>Salesperson:</strong> <t t-out="object.lead_id.user_id.name" /> <br/>
<p>Thanks,<br/>
CRM System</p>
</div> </field>
</record>
Odoo v18 Community Edition