Skip to Content
Menu
This question has been flagged
2 Replies
1741 Views

I am creating something similar to a help desk system. I need to register a new record in my model when I receive an email. I have already configured the email receiving server, but I don't know how to implement message_new. I have tried in several ways and without success. I am a beginner.


2024-02-26 18:22:37,943 8638 INFO odoo17 odoo.addons.mail.models.fetchmail: start checking for new emails on imap server Receber email TI 

2024-02-26 18:22:38,053 8638 INFO odoo17 odoo.addons.mail.models.mail_thread: Routing mail from "Vitor Augusto Zucon Gonçalves - Zanardo Válvulas" to pipefycb@zanardo.com.br with Message-Id : fallback to model:helpdesk.ticket.model, thread_id:None, custom_values:None, uid:2 

2024-02-26 18:22:38,055 8638 INFO odoo17 odoo.addons.mail.models.fetchmail: Failed to process mail from imap server Receber email TI. 

Traceback (most recent call last):

  File "/home/vazgoncalves/projects/odoo/addons/mail/models/fetchmail.py", line 211, in fetch_mail

    res_id = MailThread.with_context(**additionnal_context).message_process(server.object_id.model, data[0][1], save_original=server.original, strip_attachments=(not server.attach))

  File "/home/vazgoncalves/projects/odoo/addons/mail/models/mail_thread.py", line 1357, in message_process

    thread_id = self._message_route_process(message, msg_dict, routes)

  File "/home/vazgoncalves/projects/odoo/addons/mail/models/mail_thread.py", line 1250, in _message_route_process

    thread = ModelCtx.message_new(message_dict, custom_values)

TypeError: CardModel.message_new() missing 1 required positional argument: 'msg_dict'

2024-02-26 18:22:38,061 8638 INFO odoo17 odoo.addons.mail.models.fetchmail: Fetched 1 email(s) on imap server Receber email TI; 0 succeeded, 1 failed.


my code: 


 

    ​@api.model    

​def _create_mail_thread_defaults(self):

        return {            

​'email_send_default': True,

        }


    ​def register_models(registry):

​registry['helpdesk.ticket.model'] = CardModel


​def message_new(self, cr, uid, msg_dict, custom_values=None, context=None):

​        data = {            

​'title_card': msg_dict.get('subject')

​        }        

​model = CardModel()

​        if custom_values == None:

​   ​      custom_values = {}        

​data.update(custom_values)        

​res_id = model.pool.create(cr, uid, data, context=context)        

​return res_id


Avatar
Discard
Best Answer

Hello Vitor, 

Can you please share the whole model that uses this def method ? or you just inherited it in a default app ?

Thanks

Avatar
Discard
Author Best Answer

  I finally found a way that worked for me:


@api.model    
def message_new(self, msg_dict, custom_values=None, context=None):        
	​data = {            
		​'title_card': msg_dict.get('subject'),             
		​'description_card': msg_dict.get('body')        
	​}        
	​custom_values = custom_values or {}        
	​data.update(custom_values)        
	​card = self.env['your.custom.model'].create(data)        
	​return card



Avatar
Discard
Related Posts Replies Views Activity
1
May 24
1500
2
Jul 25
1930
0
Mar 25
1030
1
Jul 24
1909
7
Jul 24
25078