Cara Mengirim Email di Go Menggunakan Paket Net/SMTP

Anda mungkin sering perlu mengirim email ke banyak akun menggunakan program untuk otentikasi dan banyak tujuan lainnya.

Protokol SMTP mendefinisikan standar yang memungkinkan komunikasi email di server email dan agen transfer email, sedangkan protokol IMAP adalah untuk menerima email.

Go menyediakan fungsionalitas untuk aktivitas terkait email yang ditentukan oleh RFC dalam paket net/smtp, yang juga berisi ekstensi 8BITMIME, AUTH, dan STARTTLS.

Kode yang digunakan dalam proyek ini tersedia di Repositori GitHub dan gratis untuk Anda gunakan di bawah lisensi MIT.

Cara Mengirim Email di Go Menggunakan Paket Net/SMTP

Paket net/smtp adalah bagian dari pustaka standar Go, jadi Anda tidak perlu menginstal paket eksternal apa pun. Anda hanya perlu mengimpor paket sebelum menggunakannya.

import (
"net/smtp"
"log"
"crypto/tls"
"fmt"
)

Anda juga perlu mengimpor catatan paket untuk mencatat kesalahan ke konsol dan kripto/tls paket untuk mengkonfigurasi koneksi yang aman.

Setelah Anda mengimpor paket net/smtp, Anda harus menulis KirimMail() berfungsi untuk mengirim surat dan kemudian memanggil fungsi di fungsi utama.

func main() {
fmt.Print(SendMail())
}
func SendMail() string {
}

Itu KirimMail() fungsi akan berisi kode yang mengirim email ke penerima.

Cara Mengirim Email Bekerja

Protokol SMTP mendefinisikan parameter yang harus dimiliki setiap email. Parameter ini adalah alamat email pengirim dan penerima, port tempat email dikirim, server host, dan pesan.

Parameter yang disebutkan di atas penting untuk mengirim email.

Dalam tutorial ini, Anda akan belajar mengirim email Yahoo. Namun, prosesnya sama untuk Penyedia Server Surat (MSP) apa pun yang Anda gunakan.

See also  Apa Itu Magnet Hyperlink dan Bagaimana Cara Menggunakannya?

Karena Anda menggunakan Yahoo Mail, masuk ke akun Yahoo Mail Anda, buka Info akun, dan klik Keamanan Akun tab. Kemudian buat kata sandi aplikasi. Anda harus memberi nama aplikasi, dan kemudian Yahoo Mail akan membuat kata sandi untuk aplikasi, dan Anda dapat menggunakan kata sandi dalam kode Anda bersama dengan alamat email Anda.


Dalam KirimMail() fungsi, Anda akan mendeklarasikan tiga variabel; variabel yang menyimpan string email Anda, variabel yang menyimpan kata sandi email Anda, dan string yang menyimpan alamat email tujuan pengiriman pesan.

from := "[email protected]"
password := "aSecurePasswordHere"
to := "[email protected]"

Anda dapat menggunakan irisan dan loop melalui elemen jika Anda bermaksud mengirimnya ke beberapa penerima.

Mendapatkan dan Mengatur Host dan Port Email

Protokol SMTP menggunakan nomor host dan port untuk mengidentifikasi sumber email. Di sinilah MSP Anda masuk. Anda perlu mengetahui host dan nomor port yang diizinkan MSP Anda untuk digunakan.

Periksa sumber daya ini untuk daftar host MSP dan nomor port jika Anda menggunakan email publik seperti Gmail, Yahoo, atau Outlook. Google telah mematikan “aplikasi yang kurang aman” untuk Gmail; Anda mungkin ingin mengamankan aplikasi Anda jika menggunakan Gmail.

Setelah Anda mendapatkan nomor port dan alamat host, tetapkan ke variabel seperti ini:

host := "smtp.mail.yahoo.com"
port := "465"

Nomor host dan port di atas berasal dari Yahoo Mail untuk digunakan pada akun biasa. Server di-host di smtp.mail.yahoo.com, dan Anda diizinkan menggunakan port 465 untuk mengirim Email.

Mendeklarasikan Isi Email

Langkah selanjutnya adalah mendeklarasikan isi email sebagai variabel. Subjek dan tubuh membentuk pesan.

subject := "Hey, I'm Just Checking On You."
body := "Hope you're doing okay! How are you doing today. "

Itu subjek variabel adalah subjek email; itu tubuh variabel adalah isi email yang Anda kirim.

See also  Cara Menerapkan Protokol Grafik Terbuka di Next.js

Anda harus membuat peta string untuk menunjukkan header email.

headers := make(map[string]string)
headers["From"] = from
headers["To"] = to
headers["Subject"] = subject
message := ""
for k, v := range headers {
message += fmt.Sprintf("%s: %s\r", k, v)
}
message += "\r" + body

Pertama, Anda membuat peta kunci dan nilai string dan mengatur tajuk alamat Anda, alamat penerima, dan subjek, seperti yang ditunjukkan di atas. Menggunakan rentang for-loop pada header peta, a pesan variabel dideklarasikan berisi header dan pesan menggunakan format string.

Mengautentikasi Email

Email memerlukan autentikasi untuk memverifikasi sumbernya. Paket smtp menyediakan fungsionalitas untuk otentikasi email menggunakan PlainAuth. Itu Otentik Biasa metode mengambil identitas, Email pengirim, kata sandi, dan host sebagai parameter dan mengembalikan dan Otentik objek yang akan Anda gunakan untuk mengirim email.

authenticate := smtp.PlainAuth("", from, password, host)

Identitas adalah nama pengguna Anda, yang dapat dikosongkan, seperti yang terlihat dalam kasus ini.

Membuat Koneksi untuk Email

Beberapa penyedia layanan email mengharuskan Anda mengirim email melalui sambungan. Pada artikel ini, kita akan membuat koneksi TCP ke server dengan konfigurasi TLS.

tlsConfig := &tls.Config{
InsecureSkipVerify: true,
ServerName: host,
}

Pada kode di atas, Anda membuat konfigurasi TLS dengan merujuk pada konfigurasi struktur dimana Tidak AmanLewatiVerifikasi diatur ke BENARdan nama server ditetapkan ke tuan rumah variabel.

Anda harus membuat koneksi TCP menggunakan panggil metode tls kemasan. Itu panggil metode mengambil jenis koneksi (TCP), dalam hal ini, alamat server dan konfigurasi koneksi TLS.


connection, err := tls.Dial("tcp", serverAddress, tlsConfig) err != nil {
log.Panic(err)
}

Dalam kode di atas, Anda membuat koneksi TCP dan menangani kesalahan; Anda akan membuat instance paket smtp baru menggunakan Klien Baru metode bersih/smtp kemasan. Itu Klien Baru metode mengambil koneksi dan host, masing-masing.

smtpClient, err := smtp.NewClient(connection, host)
if err != nil {
log.Panic(err)
}

Sekarang setelah Anda membuat smtp contoh klien, Anda harus mengatur parameter klien smtp dan menangani kesalahan.

if err = smtpClient.Auth(authenticate); err != nil {
log.Panic(err)
}
if err = smtpClient.Mail(from); err != nil {
log.Panic(err)
}
if err = smtpClient.Rcpt(headers["To"]); err != nil {
log.Panic(err)
}

Dalam contoh di atas, Anda meneruskan parameter otentikasi, alamat pengirim, dan alamat penerima ke metode masing-masing dan menangani kesalahan.

See also  4 Cara Mendapatkan Lebih Banyak Dari Pengelola Kata Sandi Google di Android

Terakhir, Anda harus menulis ke instance koneksi, dan Anda dapat melakukannya dengan membuat penulis menggunakan Data metode Anda klien smtp contoh.

writer, err := smtpClient.Data()
if err != nil {
log.Panic(err)
}
_, err = writer.Write([]byte(message))
if err != nil {
log.Panic(err)
}

Setelah membuat penulis, Anda menulis sepotong byte pesan menggunakan Menulis cara seperti pada contoh di atas.

err = writer.Close()
if err != nil {
log.Panic(err)
}
err = smtpClient.Quit()
if err != nil {
return
}
return "Successful, the mail was sent!"

Tutup penulis dan keluar dari instance koneksi klien smtp menggunakan kode di atas. Itu KirimMail() fungsi mengembalikan pesan sukses, seperti yang ditunjukkan di atas.

Saat menelepon KirimMail() fungsi dalam utama fungsi, Anda harus mendapatkan pesan sukses yang masuk ke konsol Anda, dan email` dikirim ke penerima Anda.

Ada Lebih Banyak untuk Paket Bersih

Paket net berisi banyak paket untuk fungsionalitas terkait jaringan dan paket smtp hanyalah salah satunya. Anda juga dapat menggunakan paket TCP dan HTTP untuk pengembangan terkait jaringan.

Anda mungkin menemukan paket net/smtp berlebihan jika Anda bukan pengembang backend. Ada banyak alternatif lain untuk mengirim email dengan cepat dengan lebih sedikit baris kode. Anda dapat melihat perusahaan pemasaran email seperti SendGrid, Twilio, dan MailChimp dan layanan buletin seperti Substack dan Revue yang memungkinkan Anda mengirim email ke banyak pengguna tanpa stres.