Mengirim Email ke Customer pada Odoo

Email menjadi pilihan yang murah jika kita ingin mengirim notifikasi kepada customer, dibandingkan dengan pesan melalui sms atau whatsapp. Dengan email kita juga bisa membuat desain yang lebih menarik dengan pesan yang lebih panjang. Sehingga kita lebih bebas dalam membuat pesan.

Sebelum mengirim email kepada customer kita harus melakukan pengaturan Outgoing Email Server terlebih dahulu. Caranya pada mode debug masuk menu Setting >> Technical >> Email >> Outgoing Email Servers. Selanjutnya buat pengaturan seperti pada gambar dibawah ini.

Saat kita mengirim email kepada customer, odoo akan menggunakan email yang didaftarkan pada Outgoing Email Servers tersebut. Isi sesuai email yang anda gunakan, dan pastikan untuk klik tombol Test Connection untuk menguji apakah pengaturan yang kita lakukan benar atau tidak. Jika gagal tentu saja email tidak bisa dikirim.

Agar bisa mengirim email dari model, model tersebut harus inherit ke model mail.thread seperti pada kode dibawah ini.

# -*- coding: utf-8 -*-

from odoo import api, fields, models, _

class ProductRepair(models.Model):
    _name = 'product.repair'
    # agar bisa mengirim email, kita harus inherit model mail.thread
    _inherit = ['mail.thread'] 
    _description = "Product Repair"

    product_id = fields.Many2one('product.product', string='Product')
    partner_id = fields.Many2one('res.partner', string='Customer')
    state = fields.Selection([
        ('draft', 'Draft'),
        ('in_progress', 'In Progress'),
        ('finish', 'Finished')
    ], default='draft')

Ada beberapa method dari model mail.thread yang bisa digunakan untuk mengirim email, salah satunya adalah method message_post_with_template. Dengan method ini kita bisa mengirim email dengan template dalam format html, sehingga kita bisa membuat desain email yang bagus. Berikut ini adalah contoh email template untuk model product.repair diatas

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data noupdate="0">        

        <record id="product_repair_finish_email_template" model="mail.template">
            <field name="name">Product Repair Finish Email Template</field>
            <field name="model_id" ref="tutorial_email.model_product_repair"/>
            <field name="email_from">Ngasturi Teknik &amp;lt;z.nry27@gmail.com&amp;gt;</field>
            <field name="partner_to">${object.partner_id.id}</field>
            <field name="subject">Pemberitahuan Selesai Perbaikan</field>
            <field name="body_html" type="html">
<div style="font-family: 'sans-serif'; padding: 10px; max-width:700px; background-color: white; border: 4px solid #0E9C48;">
    <h3 style="background-color: #0E9C48; color: white; text-align: center; padding: 20px 0px; margin-bottom: 10px;">
        NGASTURI TEKNIK
    </h3>
    <h4>Hai ${object.partner_id.name}</h4>
    <p>
        Dengan ini kami memberitahukan bahwa perbaikan untuk produk ${object.product_id.name} anda telah :
    </p>

    <p style="text-align: center; margin-bottom: 20px; margin-top: 20px;">
        <span style="background-color: #0E9C48; color: white; padding: 10px 10px;">SELESAI</span>
    </p>

    <p>
        Anda dapat mengambil produk tersebut pada jam kerja: <b>senin - jumat pukul 09:00 - 17:00</b>.
    </p>

    <p>Terima Kasih.</p>
    
</div>
            </field>
            <field name="user_signature" eval="False"/>
            <field name="auto_delete" eval="True"/>
        </record>
    </data>
</odoo>

Saat kita selesai install module, template diatas bisa dilihat previewnya dari menu Setting >> Technical >> Email >> Templates.

Untuk memasukkan data yang bersifat dinamis, kita bisa menggunakan kode seperti dibawah ini

# field_name adalah nama field yang ada di model, yang di assign pada mail template aktif
${object.field_name}

Pesan yang ingin ditampilkan pada customer dapat disusun menggunakan kode html dan css. Tapi ingat, tidak semua css bisa digunakan pada email, salah satu kode css yang tidak jalan di email adalah position. Jadi ada kemungkinan preview email tersebut bisa beda dengan saat dibuka di email client.

Selanjutnya untuk mengirim email, kita tinggal memanggil method message_post_with_template seperti pada kode dibawah ini

def send_finish_email(self):
    # cari mail template berdasarkan eksternal id
    template_id = self.env['ir.model.data'].xmlid_to_res_id('tutorial_email.product_repair_finish_email_template', raise_if_not_found=False)
    if template_id:
        for rec in self:
            rec.with_context(force_send=True).message_post_with_template(template_id)

Jika email tidak langsung diterima, bisa dicek di menu Setting >> Technical >> Email >> Emails, barangkali masih menunggu antrian untuk dikirim oleh odoo. Anda juga bisa mengatur cron job Email Queue Manager di menu Setting >> Technical >> Automation >> Scheduled Actions, kemudian cari Mail: Email Queue Manager. Default cron job ini adalah berjalan setiap 1 jam sekali, agar customer segera mendapat email, turunkan pengaturannya, misal 10 menit sekali.

Berikut ini adalah tampilan email dengan mail template yang baru saja kita buat jika dibuka dari gmail.

Terlihat masih ada branding odoo di email tersebut. Untuk menghilangkan branding tersebut kita harus membuat template baru, seperti ini

<template id="message_no_odoo_branding">
    <div t-raw="message.body"/>
</template>

Kemudian ubah method send_finish_email agar menggunakan template yang baru saja kita buat sebagai layout, seperti kode dibawah ini

def send_finish_email(self):
    # cari mail template berdasarkan eksternal id
    template_id = self.env['ir.model.data'].xmlid_to_res_id('tutorial_email.product_repair_finish_email_template', raise_if_not_found=False)
    if template_id:
        for rec in self:
            rec.with_context(force_send=True).message_post_with_template(template_id, email_layout_xmlid="tutorial_email.message_no_odoo_branding")

Terlihat sekarang branding odoo sudah tidak ada.

Download source code di sini

Tulisan Serupa

Leave a Reply

Your email address will not be published. Required fields are marked *