Go-Lang Send SMTP Email With Gmail

Muhammad Yusuf
4 min readNov 20, 2022

--

Langkah-langkah membuat app password Gmail Untuk mengirim SMTP email menggunakan Go-Lang

Banner Golang SMTP Mail Sender

Gmail App Password

App password merupakan fitur dari Gmail yang memungkinkan kita dapat membuat password agar dapat digunakan di third party application, contohnya sebagai kebutuhan kita dalam membuat Aplikasi kirim Email SMTP melalui Gmail.

Generate App Password Gmail

Untuk langkah pembuatan / generate app password akan kita bagi menjadi 5 step, detailnya sebagai berikut

Step 1

Pertama silahkan buka halaman berikut https://security.google.com/settings/security/apppasswords dan silahkan login menggunakan akun gmail.

Silahkan pilih email yang ingin digunakan untuk dibuatkan app password.

Halaman Login Gmail
1. Halaman Login Gmail

Step 2

Setelah masuk menggunakan akun gmail, selanjutnya akan di arahkan ke halaman App Password.

App Password Page
2. Halaman App Password

Sebelum melakukan langkah di atas pastikan kita telah mengaktifkan 2-Step Verification seperti berikut:

3. Halaman Google Account

Step 3

Setelah terbuka halaman App Password pada gambar 2, selanjutnya silahkan pilih App dan pilih Device.

Create App Password Page
4. Membuat app password

Step 4

Selanjutnya silahkan tuliskan nama app password yang diinginkan, dan klik GENERATE:

5. Generate app password

Step 5

Jika generate berhasil maka akan muncul pop-up degan informasi app password yang sudah berhasil digenerate seperti berikut:

Note: Silahkan simpan app password tersebut

6. Finish generate app password

Membuat App Golang Sederhana Untuk Mengirim Email

Dengan Package net/smtp

Pada golang sendiri memiliki package bernama net/smtp yang dapat digunakan untuk berkomunikasi melalui protocol SMTP.

Pada catatan golang kali ini, saya ambil dari tutorial mas noval agung di link berikut: https://dasarpemrogramangolang.novalagung.com/C-send-email.html

Selanjutnya kita buat project.

Pertama kita buat folder baru, sebagai contoh pada catatan saya ini membuat folder dengan nama (belajar-golang-smtp), langkahnya seperti berikut:

  • Membuat folder dengan nama belajar-golang-smtp
  • Arahkan terminal ke folder yang baru dibuat tersebut
  • Inisialisasi sebagai go module
    (go mod init muhammadyusuf22/belajar-golang-smtp)
Create Project Golang
7. Screenshoot terminal create golang project

Setelah itu di dalam project yang telah kita buat silahkan buat file baru main.go:

Project Go send Email
8. Folder Project Go

Berikut syntax pada main.go:

package main

import (
"fmt"
"log"
"net/smtp"
"strings"
)

const (
CONFIG_SMTP_HOST = "smtp.gmail.com" // host smtp untuk gmail
CONFIG_SMTP_PORT = 587 // prot smtp untuk gmail
CONFIG_SENDER_NAME = "Muhammad Yusuf <inbox.myusuf@gmail.com>" // nama pengirim
CONFIG_AUTH_EMAIL = "inbox.myusuf@gmail.com" // email yg kita buatkan app password
CONFIG_AUTH_PASSWORD = "irkwfpiiyonebuww" // dari app password yang telah kita buat
)

func main() {
to := []string{"muh.iyus@gmail.com", "yusuf@tabeldata.com"} // email tujuan
cc := []string{"muhammad.yusuf@protechbit.com"} // email cc
subject := "Test Golang Email"
message := "Hello, From Golang App Send Email"

err := sendMail(to, cc, subject, message)
if err != nil {
log.Fatal(err.Error())
}

log.Println("Mail sent!")
}

func sendMail(to []string, cc []string, subject, message string) error {
body := "From: " + CONFIG_SENDER_NAME + "\n" +
"To: " + strings.Join(to, ",") + "\n" +
"Cc: " + strings.Join(cc, ",") + "\n" +
"Subject: " + subject + "\n\n" +
message

auth := smtp.PlainAuth("", CONFIG_AUTH_EMAIL, CONFIG_AUTH_PASSWORD, CONFIG_SMTP_HOST)
smtpAddr := fmt.Sprintf("%s:%d", CONFIG_SMTP_HOST, CONFIG_SMTP_PORT)

err := smtp.SendMail(smtpAddr, auth, CONFIG_AUTH_EMAIL, append(to, cc...), []byte(body))
if err != nil {
return err
}

return nil
}

Selanjutnya silahkan jalankan program dengan perintah

go run main.go

Dan silahkan check email yang menjadi tujuan, maka seharusnya akan ada email masuk dari email yang kita buatkan app password, contohnya seperti berikut:

9. Receive Email

Dengan Package Gomail v2

Jika dengan menggunakan package Gomail v2 ini, proses pengiriman email akan lebih mudah ketika ingin membuat email dalam bentuk format html atau menambahkan attachment di email yang akan dikirim.

Untuk menambahkan package Gomail ini kita bisa menggunakan perintah:

go get -u gopkg.in/gomail.v2

Selanjutnya ganti program main.go menjadi seperti berikut:

package main

import (
"log"

"gopkg.in/gomail.v2"
)

const (
CONFIG_SMTP_HOST = "smtp.gmail.com" // host smtp untuk gmail
CONFIG_SMTP_PORT = 587 // prot smtp untuk gmail
CONFIG_SENDER_NAME = "Muhammad Yusuf <inbox.myusuf@gmail.com>" // nama pengirim
CONFIG_AUTH_EMAIL = "inbox.myusuf@gmail.com" // email yg kita buatkan app password
CONFIG_AUTH_PASSWORD = "irkwfpiiyonebuww" // dari app password yang telah kita buat
)

func main() {
mailer := gomail.NewMessage()
mailer.SetHeader("From", CONFIG_SENDER_NAME)
mailer.SetHeader("To", "muh.iyus@gmail.com", "yusuf@tabeldata.com") // email tujuan
mailer.SetAddressHeader("Cc", "muhammad.yusuf@protechbit.com", "Protechbit Mail Yusuf") // email cc
mailer.SetHeader("Subject", "Test Golang Email")
mailer.SetBody("text/html", "Hello, <b>From Golang App Send Email</b>")
mailer.Attach("./banner.png")

dialer := gomail.NewDialer(
CONFIG_SMTP_HOST,
CONFIG_SMTP_PORT,
CONFIG_AUTH_EMAIL,
CONFIG_AUTH_PASSWORD,
)

err := dialer.DialAndSend(mailer)
if err != nil {
log.Fatal(err.Error())
}

log.Println("Mail sent!")
}

Demikian catatan generate gmail app password, dan contoh golang send smtp email.

Untuk program yang telah dibuat bisa dilihat di Link Github.

Selanjutnya akan kita bahas catatan membuat golang Rest API authentication login / register via Email verification dan kita gabungkan dengan catatan Social Login Sebelumnya yang sudah kita buat.

--

--

Muhammad Yusuf
Muhammad Yusuf

Written by Muhammad Yusuf

I am a software engineer, and these are some of my study notes

No responses yet