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 &lt;z.nry27@gmail.com&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

13 Replies to “Mengirim Email ke Customer pada Odoo”

  1. Pak Ngasturi, saya sudah mencoba literatur yang bapak berikan, semua settingan sudah saya atur sedemikian rupa, pertama saya sudah masuk ke settingan outgoing server nya, dan disana saya telah mengisikan SMTP Server dan port nya seperti yang bapak berikan. Setelah itu di email saya sudah di atur SMTP nya. Pada saat saya jalankan Test Connection, test nya gagal terhubung. Bapak Ngasturi bisa bantu ngasih solusi nya kah? Jika berkenan saya boleh minta email dan wa bapak agar saya dapat mengirimkan foto screenshot-an eror saya untuk lebih detailnya.

  2. Pak ngasturi,saya ada email notifikasi dr odoo. Cara matikan langganan notifikasi email odoo gimana? Soalnya mengganggu notifikasi jadi banyak

        1. kurang tahu pak, saya gak tahu isi notifikasinya gimana, jadi saya tidak bisa ngira-ngira itu sumbernya dari mana. coba kasih link ke contoh notifikasinya

  3. pak ngasturi, saya mau tanya untuk mengirim email ke customer ini apakah bisa di jadwalkan dan di kirim kebanyak alamat email tanpa menambah codingan ini ?? jadi hanya menggunakan email templates lalu templates tersebut di kirim ke banyak alamat email. Terima kasih.

    1. bisa, tinggal ubah aja kodingannya, misal recipientnya(partner) yang banyak, atau diloop tiap customer. kalau saran saya sih mending pakai module bawaan odoo aja => mass_mailing.

  4. Pak, mau tanya saya sudah setting email di incoming dan outgoing emailnya, menggunakan email dengan domain sendiri dan ketika di test sudah sukses semua, namun ketika mencoba mengirim email kok ngga bisa ya. mohon pencerahannya

Leave a Reply