Our Blog

Latest News

Mengirim Email Menggunakan Golang | Ruang Developer

RUANGDEVELOPER.com – Halo Bakat Digital! Gimana kabarnya hari ini? Tentu Tetap sehat dan semangat kan? Setelah sekian Panjang Kagak Bersua, maka pada kesempatan kali ini kita Bersua lagi dengan topik yang lumayan Mantap Ialah Metode mengirim email SMTP menggunakan Golang.

Pengiriman email dalam sebuah aplikasi merupakan salah satu fitur yang Pandai dikatakan sangat Krusial. Salah satu Contoh yang sering kita jumpai adalah pada Ketika Ingin melakukan reset kata sandi atau Validasi alamat email. Beberapa waktu yang Lampau (dah Panjang sih :D) kita sudah pernah belajar mengirimkan email menggunakan PHP. Kalau Engkau lupa atau belum sempat membacanya, Engkau Pandai cek tulisannya di sini ya (tapi nanti setelah selesai dari sini, hehehe).

Mari kita mulai!

Menyiapkan Project

Buat folder dan masuk ke folder

mkdir golang-mail && cd golang-mail

Init Go modul

Install dependency

go get gopkg.in/gomail.v2
go get github.com/stretchr/testify

Gas Ngoding!

Langkah pertama adalah Membangun file mail.go di root folder project.

Membangun Constant

Constant berisi kredensial SMTP dan email pengirim dan tujuan reply. Pada tulisan ini, saya menggunakan Mailtrap Demi menguji coba pengiriman email. Engkau juga Pandai menggunakan SMTP server lain seperti MailHog atau Mailpit, atau bahkan menggunakan real SMTP server yang biasanya disediakan oleh penyedia layanan Hosting.

Jangan menggunakan kredensial yang sama dengan Contoh saya ya, sudah Niscaya gagal connect 😭

const (
	smtpHost = "sandbox.smtp.mailtrap.io"
	smtpPort = 587
	smtpUser = "43374cf35e6v12"
	smtpPass = "5c8a4af720w094"
	mailFrom = "[email protected]"
  	mailReplyTo = "[email protected]"
)

Membangun Fungsi Demi Inisialisasi Dialer

Sebuah dialer adalah objek yang memfasilitasi pembuatan koneksi ke server email Demi mengirimkan email. Setelah dialer dikonfigurasi, maka dialer dapat digunakan Demi membentuk koneksi ke server email dan mengirim email.

func InitDialer() *gomail.Dialer {
	dialer := gomail.NewDialer(
		smtpHost,
		smtpPort,
		smtpUser,
		smtpPass,
	)

	dialer.TLSConfig = &tls.Config{InsecureSkipVerify: true}

	return dialer
}

Fungsi InitDialer ini bertujuan Demi menginisialisasi dan mengonfigurasi objek dialer dari gomail. Sebuah objek dialer baru dibuat dengan menggunakan fungsi gomail.NewDialer(). Parameter-parameter yang diperlukan adalah smtpHost (host server email), smtpPort (port server email), smtpUser (username email), dan smtpPass (password email).

READ:  Menggunakan Database Transaction Di Laravel

Konfigurasi TLS pada objek dialer diatur dengan Membangun dan menetapkan konfigurasi TLS baru. InsecureSkipVerify diatur sebagai true, yang berarti mail client Kagak akan memverifikasi sertifikat server. Pengaturan ini biasanya digunakan Ketika pengembangan atau uji coba saja dan Kagak dianjurkan Demi digunakan pada server produksi karena dapat mengakibatkan risiko keamanan.

Membangun Fungsi Demi Mengirim Email

Setelah kita Pandai Membangun dialer menggunakan fungsi InitDialer, selanjutnya kita Pandai menggunakan dialer Demi mengirim email ke alamat tujuan. Demi memisahkan kode, kita buat fungsi tersendiri Demi mengirimkan email seperti berikut ini.

func SendMail(
	to string,
	subject string,
	message string,
) error {
	dialer := InitDialer()

	mail := gomail.NewMessage()

	mail.SetHeader("From", mailFrom)
	mail.SetHeader("To", to)
	mail.SetHeader("Reply-To", mailReplyTo)
	mail.SetHeader("Subject", subject)
	mail.SetBody("text/html", message)

	return dialer.DialAndSend(mail)
}

Fungsi SendMail ini bertujuan Demi mengirimkan email mDialerenggunakan objek dialer yang telah dikonfigurasi sebelumnya. Fungsi ini menerima tiga parameter: to (alamat email penerima), subject (subjek email), dan message (isi pesan email).
Sebuah objek Message baru dari paket gomail dibuat Demi menampung informasi tentang email yang akan dikirim. Header email diatur menggunakan metode SetHeader Demi mengisi informasi seperti pengirim (From), penerima (To), alamat balasan (Reply-To), dan subjek (Subject). Selanjutnya, metode SetBody digunakan Demi menentukan jenis konten dan isi pesan email.

READ:  Langkah Kerja Website: Mekanisme di Balik Layar

Fungsi DialAndSend pada objek dialer digunakan Demi mengirimkan email yang telah disiapkan. Fungsi ini mengembalikan nilai error, dan Kalau email berhasil dikirim, nilai error akan nil. Kalau terjadi kesalahan selama pengiriman, error akan berisi informasi tentang kesalahan tersebut.

Berikut adalah keseluruhan kode pada file mail.go

package main

import (
	"crypto/tls"

	"gopkg.in/gomail.v2"
)

const (
	smtpHost = "sandbox.smtp.mailtrap.io"
	smtpPort = 587
	smtpUser = "43374cf35e6v12"
	smtpPass = "5c8a4af720w094"
	mailFrom = "[email protected]"
  	mailReplyTo = "[email protected]"
)

func InitDialer() *gomail.Dialer {
	dialer := gomail.NewDialer(
		smtpHost,
		smtpPort,
		smtpUser,
		smtpPass,
	)

	dialer.TLSConfig = &tls.Config{InsecureSkipVerify: true}

	return dialer
}

func SendMail(
	to string,
	subject string,
	message string,
) error {
	dialer := InitDialer()

	mail := gomail.NewMessage()

	mail.SetHeader("From", mailFrom)
	mail.SetHeader("To", to)
	mail.SetHeader("Reply-To", mailReplyTo)
	mail.SetHeader("Subject", subject)
	mail.SetBody("text/html", message)

	return dialer.DialAndSend(mail)
}

Pengujian

Sekalian kode sudah kita siapkan dan kini saatnya kita lakukan pengujian kode Demi memastikan semuanya sudah OK dan bekerja dengan Berkualitas.

READ:  Website E-Commerce: Tips Desain yang Efektif

Buat file baru bernama mail_test.go di dalam root folder project.

package main

// Kode testing di sini

Buat unit testing Demi fungsi InitDialer.

func TestInitDialer(t *testing.T) {
	dialer := InitDialer()

	assert.NotEmpty(t, dialer)
}

assert diimport dari package testify (import github.com/stretchr/testify/assert)

Buat unit testing Demi fungsi SendMail.

func TestSendMail(t *testing.T) {
	err := SendMail(
		"[email protected]",
		"Halo, ini subject",
		"Halo, ini isi pesan yang dikirim menggunakan GoMail ya!",
	)

	assert.NoError(t, err)
}

Jalankan pengujian dengan perintah berikut:

Pastikan Sekalian test lolos

PASS
ok  	golang-mail	4.033s

Cek juga di kotak masuk email, pastikan email terkirim.

Email Terkirim

Selesai

Selamat! Sekarang kita sudah berhasil mengirimkan email menggunakan Golang. Perlu Engkau ketahui bahwa ini adalah bagian yang sederhana dari sebuah proses pengiriman email di aplikasi. Pada penggunaan yang sebenarnya, tentu kita Kagak akan mengirim email berisi text sederhana seperti Contoh pada tutorial ini, email yang dikirim biasanya menggunakan html dan berisi berbagai data Elastis yang akan ditampilkan pada email. Selain itu, proses pengiriman email juga Pandai memakan waktu yang Panjang karena melibatkan server lain (SMTP Server). Oleh karena itu, kita juga perlu belajar menerapkan mekanisme antrean pada proses pengiriman email di aplikasi kita.

Kita akan bahas hal-hal menarik tersebut di lain waktu ya. Silahkan tinggalkan komentar Engkau Kalau Terdapat sesuatu yang Ingin Engkau tanyakan. Tamat jumpa! 👋👋👋

Source code tutorial ini dapat Engkau lihat di link berikut: https://github.com/ruangdeveloper/golang-send-mail

Sukses Menjalankan Bisnis Melalui Online
Panduan Memilih Jasa Pembuatan Website Jual Beli Mobil