Anda mungkin sering perlu mengirim email ke banyak akun menggunakan program untuk autentikasi 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 a 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.
impor (
"bersih/smtp"
"catatan"
"kripto/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.fungsiutama() {
fmt. Cetak (SendMail())
}
fungsiKirim Email()rangkaian {
// Tambahkan kode di sini
}
Itu KirimMail() fungsi akan berisi kode yang mengirim email ke penerima.
Cara Kerja Mengirim Email
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.
Karena Anda menggunakan Yahoo Mail, masuk ke Yahoo Mail akun, langsung ke 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.
dari := "[email protected]"
kata sandi := "aSecurePasswordDi Sini"
ke := "[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:
tuan rumah := "smtp.mail.yahoo.com"
pelabuhan := "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 := "Hei, Aku Hanya Memeriksamu."
body := "Semoga kamu baik-baik saja! Bagaimana kabarmu hari ini. "
Itu subjek variabel adalah subjek email; itu tubuh variabel adalah isi email yang Anda kirim.
Mengatur Header Email
Anda harus membuat peta string untuk menunjukkan header email.
header := membuat(peta[rangkaian]rangkaian)
headers["Dari"] = dari
headers["Kepada"] = ke
headers["Subjek"] = subjek
pesan := ""
untuk k, v := jangkauan header {
pesan += fmt. Sprintf("%s: %s\r", k, v)
}
pesan += "\r" + isi
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 otentikasi 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 Otentik objek yang akan Anda gunakan untuk mengirim email.
otentikasi := smtp. PlainAuth("", dari, kata sandi, 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. Konfigurasi{
InsecureSkipVerifikasi: BENAR,
Nama Server: tuan rumah,
}
Pada kode di atas, Anda membuat konfigurasi TLS dengan merujuk ke konfigurasi struktur dimana Tidak AmanLewatiVerifikasi diatur ke BENAR, dan 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.
koneksi, err := tls. Dial("tcp", serverAddress, tlsConfig) err != nol {
catatan. Panik (keliru)
}
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. Klien Baru (koneksi, host)
jika salah != nol {
catatan. Panik (keliru)
}
Sekarang setelah Anda membuat smtp contoh klien, Anda harus mengatur parameter klien smtp dan menangani kesalahan.
jika err = smtpClient. Otentikasi (otentikasi); salah != nol {
catatan. Panik (keliru)
}
jika err = smtpClient. Surat (dari); salah != nol {
catatan. Panik (keliru)
}
jika err = smtpClient. Rcpt (tajuk["Ke"]); salah != nol {
catatan. Panik (keliru)
}
Dalam contoh di atas, Anda meneruskan parameter otentikasi, alamat pengirim, dan alamat penerima ke metode masing-masing dan menangani kesalahan.
Terakhir, Anda harus menulis ke instance koneksi, dan Anda dapat melakukannya dengan membuat penulis menggunakan Data metode Anda klien smtp contoh.
penulis, err := smtpClient. Data()
jika salah != nol {
catatan. Panik (keliru)
}
_, err = penulis. Menulis([]byte(pesan))
jika salah != nol {
catatan. Panik (keliru)
}
Setelah membuat penulis, Anda menulis sepotong byte pesan menggunakan Menulis cara seperti pada contoh di atas.
salah = penulis. Menutup()
jika salah != nol {
catatan. Panik (keliru)
}
err = smtpClient. Berhenti()
jika salah != nol {
kembali
}
kembali "Berhasil, surat telah dikirim!"
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 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.