Skip to Content
Menu
This question has been flagged
4 Replies
24045 Views

I have a kept a binary field for attachment file. If I click on the confirm button, mail should be send along with attachment file.


I have tried this code,


class Test(models.Model)

_name = 'test'


soft_copy = fields.Binary(string="Soft Copy")

file_name = fields.Char(string="File Name") 


def action_confirm(self):

  self.ensure_one()

  self.state = 'confirm'

  email_template = self.env.ref('module1.test_email_template')

  email_template.send_mail(self.id, raise_exception=False, force_send=True)



Email Template,


<record id="test_email_template" model="mail.template">

            <field name="name">Test</field>

            <field name="subject">Checking Test</field>

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

            <field name="email_to">$employee_id.work_mail}</field>

            <field name="model_id" ref="module1.model_test"/>

            <field name="report_template" ref="module1.test_reports"/>

            <field name="report_name">Test</field>

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

            <field name="body_html"><![CDATA[ -----Content---

            ]]></field>

Avatar
Discard
Best Answer

First you have to find the ir.attachment records of [soft_copy],  with your model, res_id and so on from ir_attachment table, After update attachment list of email_template as email_template.attachment_ids = [(4, ids)] else ''. here ids are the fetched record id.

Avatar
Discard
Author

First time it work correctly, that is if I click on confirm button and one soft copy is sent to mail. But second time if i click on confirm button 1st soft copy is also coming in the second mail. i should get current datas soft copy only

Please check the one2many flags here, hope you can solve your problem,

https://hilarlive.wordpress.com/2017/04/22/one2many-or-many2many-flags/

Author

Hi Hilar,

Thanks. It works correctly after sending mail I used email_template.attachment_ids = [(3, ids)] to unlink the attachment.

Fine, upvote the given answer so others can identify which one is solution,

Best Answer

This way more clean :)

id = self.env['ir.attachment'].create(attachment)

                email_template.attachment_ids = [(6, 0, id)]

               email_template.send_mail(self.id, raise_exception=False, force_send=True)

Avatar
Discard
Author Best Answer

I made it with this code to send a attachment mail through mail


def send_mail_func(self)

    email_template = self.env.ref('module1.test_email_template')

     attachment = {

               'name': str(self.file_name),

               'datas': self.binary_field_name

          datas_fname': self.file_name,

               'res_model': 'model_name',

               'type': 'binary'

           }
         
             id = self.env['ir.attachment'].create(attachment)

                email_template.attachment_ids = [(4, ir_id.id)]

               email_template.send_mail(self.id, raise_exception=False, force_send=True)

               email_template.attachment_ids = [(3, ir_id.id)]


Avatar
Discard