Enviar mail (sin plantilla) desde Odoo 15
Es un ejemplo sencillo de como:
- Poner un botón en el formulario de contactos.
- Al hacer click enviar un email sin usar plantilla.
Antes de empezar asegurate de que:
- Tienes configurado el correo de salida y te funciona.
- Mira cada cuanto tiempo se enviarn los mails en Odoo (normalmente es una hora... pero para pruebas bájalo a 1 minuto en Técnico/Acciones planificadas.
Nos creamos una vista con el código del botón. El fichero lo podemos llamar view_partner_form.xml y lo depositamos en carpeta views :
Nos creamos un modelo que podemos llamar models.py y lo depositamos en la carpeta de los modelos :
Si quisieramos enviar un adjunto, ponemos el adjunto en este caso en la carpeta static con nombre text.txt y puedes poner :
# -*- encoding: utf-8 -*-
from odoo import models, fields, api
from pathlib import Path
import base64
class FhResPartner(models.Model):
_inherit = 'res.partner'
def fh_send_email(self):
mail_mail = self.env['mail.mail']
email_to = self.email # your object Mail ID
subject = "Test Send Email"
body = """Hola,
desde Odoo. Ignora este mensaje
Atentamente.
"""
path = Path(__file__).parent
module_path = path.parent
print(module_path)
data_value = open(str(module_path) + "/static/test.txt", 'rb').read()
data_record = base64.encodebytes(data_value)
attachment = {
'name': "test.txt",
'type': 'binary',
'datas': data_record,
'store_fname': data_record,
'create_uid': self.env.uid,
'res_model': self._name,
'res_id': self.id,
'mimetype': 'text/csv',
}
attachment_id = self.env['ir.attachment'].create(attachment)
mail_id = mail_mail.create({
'email_to': email_to,
'subject': subject,
'body_html': '<pre>%s</pre>' % body,
'attachment_ids':(4, attachment_id.id)
})
mail_mail.send([mail_id])
Si quieres enviar el mail con formato HTML basta con que cambies el body y pongas por ejemplo: