Akademi Manajemen Informatika

sandidharma.ac.id – Halo Bakat Digital! Gimana kabarnya hari ini? Tentu Tetap sehat dan semangat kan? Setelah sekian lelet Tak Berjumpa, maka pada kesempatan kali ini kita Berjumpa Tengah dengan topik yang lumayan Asik Yakni Langkah mengirim email SMTP menggunakan Golang.

Pengiriman email dalam sebuah aplikasi merupakan salah satu fitur yang Dapat dikatakan sangat Krusial. Salah satu Teladan yang sering kita jumpai adalah pada Begitu Ingin melakukan reset kata sandi atau Pembuktian alamat email. Beberapa waktu yang Lewat (dah lelet sih :D) kita sudah pernah belajar mengirimkan email menggunakan PHP. Kalau Anda lupa atau belum sempat membacanya, Anda Dapat 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 Kepada menguji coba pengiriman email. Anda juga Dapat 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 Teladan 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 Kepada Inisialisasi Dialer

Sebuah dialer adalah objek yang memfasilitasi pembuatan koneksi ke server email Kepada mengirimkan email. Setelah dialer dikonfigurasi, maka dialer dapat digunakan Kepada 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 Kepada 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  Definisi, Teladan, & Metode Membuatnya

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

Membangun Fungsi Kepada Mengirim Email

Setelah kita Dapat Membangun dialer menggunakan fungsi InitDialer, selanjutnya kita Dapat menggunakan dialer Kepada mengirim email ke alamat tujuan. Kepada memisahkan kode, kita buat fungsi tersendiri Kepada 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 Kepada 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 Kepada menampung informasi tentang email yang akan dikirim. Header email diatur menggunakan metode SetHeader Kepada mengisi informasi seperti pengirim (From), penerima (To), alamat balasan (Reply-To), dan subjek (Subject). Selanjutnya, metode SetBody digunakan Kepada menentukan jenis konten dan isi pesan email.

READ  Definisi, Gaji, Tugas, Skill, & Kualifikasi

Fungsi DialAndSend pada objek dialer digunakan Kepada mengirimkan email yang telah disiapkan. Fungsi ini mengembalikan nilai error, dan Apabila email berhasil dikirim, nilai error akan nil. Apabila 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 Kepada memastikan semuanya sudah OK dan bekerja dengan Berkualitas.

READ  Flutterize : Program Faktorial menggunakan Dart

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

package main

// Kode testing di sini

Buat unit testing Kepada 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 Kepada 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 Anda ketahui bahwa ini adalah bagian yang sederhana dari sebuah proses pengiriman email di aplikasi. Pada penggunaan yang sebenarnya, tentu kita Tak akan mengirim email berisi text sederhana seperti Teladan pada tutorial ini, email yang dikirim biasanya menggunakan html dan berisi berbagai data Luwes yang akan ditampilkan pada email. Selain itu, proses pengiriman email juga Dapat memakan waktu yang lelet 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 Anda Apabila Eksis sesuatu yang Ingin Anda tanyakan. Tamat jumpa! 👋👋👋

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