Go-Lang Send SMTP Email With Gmail
Langkah-langkah membuat app password Gmail Untuk mengirim SMTP email menggunakan Go-Lang
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.
Step 2
Setelah masuk menggunakan akun gmail, selanjutnya akan di arahkan ke halaman App Password.
Sebelum melakukan langkah di atas pastikan kita telah mengaktifkan 2-Step Verification seperti berikut:
Step 3
Setelah terbuka halaman App Password pada gambar 2, selanjutnya silahkan pilih App dan pilih Device.
Step 4
Selanjutnya silahkan tuliskan nama app password yang diinginkan, dan klik GENERATE:
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
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)
Setelah itu di dalam project yang telah kita buat silahkan buat file baru main.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:
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.