Skip to Content
मेन्यू
This question has been flagged

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}&amp;model=crm.lead&amp;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

Avatar
Discard
Best Answer

send_mail(..., force_send=False) creates a mail.mail record, but Odoo’s mail queue will only send it correctly if it’s fully committed and not in a broken state. Using post-commit + force_send=True is the most reliable for real-time delivery


@api.model

def create(self, vals):

    record = super().create(vals)


    def send_email_after_commit():

        template = self.env.ref('crm.email_template_added_to_opp')

        if self.env.cr.postcommit.add(send_email_after_commit)

    return record


Avatar
Discard
Best Answer

Hii,
Update your Python method:

def send_custom_email(self):

    template = self.env.ref('crm.email_template_added_to_opp', raise_if_not_found=False)

    if not template:

        return


    if self.id, email_values=email_values, force_send=False)


Fix your Email Template XML:
<record id="email_template_added_to_opp" model="mail.template">

    <field name="name">Added to Opportunity Notification</field>

    <field name="model_id" ref="your_module.model_your_model"/>  

    <field name="email_from">testam1sales@gmail.com</field>

    <field name="subject">New Opportunity: ${object.lead_id.name}</field>

    <field name="body_html" type="html">

        <div>Hello ${object.bu_head_id.name}, you've been added to ${object.lead_id.name}.</div>

    </field>

    <field name="auto_delete" eval="False"/>  

</record>

To find correct model ID:

  • Go to Settings > Technical > Models
  • Copy the XML ID for your model, like: your_module.model_your_model
Ensure Email Cron is Active:
  • Settings > Technical > Scheduled Actions
  • Find "Mail: Email Queue Manager"
  • Make sure it is enabled and runs every 1–5 minutes.

i hope it is usefull

Avatar
Discard
Related Posts Replies Views Activity
1
जून 25
688
1
जुल॰ 25
438
1
जून 25
626
1
जून 25
788
1
सित॰ 23
2851