Kimlik doğrulama ve diğer birçok amaç için programları kullanan birçok hesaba sıklıkla e-posta göndermeniz gerekebilir.

SMTP protokolü, posta sunucuları ve posta aktarım aracıları arasında e-posta iletişimine izin veren standartları tanımlarken, IMAP protokolü e-posta almak içindir.

Go, 8BITMIME, AUTH ve STARTTLS uzantılarını da içeren net/smtp paketinde RFC tarafından tanımlanan e-postayla ilgili etkinlikler için işlevsellik sağlar.

Bu projede kullanılan kod bir GitHub Deposu ve MIT lisansı altında kullanmanız için ücretsizdir.

Net/SMTP Paketini Kullanarak Go'da E-posta Gönderme

net/smtp paketi Go standart kitaplığının bir parçasıdır, bu nedenle herhangi bir harici paket yüklemeniz gerekmez. Paketi kullanmadan önce içe aktarmanız yeterlidir.

içe aktarmak (
"net/smtp"
"kayıt"
"kripto/tl"
"fmt"
)

Ayrıca içe aktarmanız gerekecek kayıt hataları konsola kaydetmek için paket ve kripto/tl güvenli bir bağlantı yapılandırmak için paket.

net/smtp paketini içe aktardıktan sonra bir Posta göndermek() postayı göndermek ve ardından ana işlevdeki işlevi çağırmak için işlev.

instagram viewer
işlevana() {
fmt. Yazdır (SendMail())
}
işlevPosta göndermek()sicim {
// Kodu buraya ekleyin
}

bu Posta göndermek() işlevi, postayı alıcılara gönderen kodu içerir.

E-posta Gönderme Nasıl Çalışır?

SMTP protokolü, her postanın sahip olması gereken parametreleri tanımlar. Bu parametreler, gönderici ve alıcı posta adresleri, postanın gönderildiği bir bağlantı noktası, bir ana sunucu ve bir mesajdır.

Yukarıda belirtilen parametreler e-posta göndermek için önemlidir.

Bu eğitimde, Yahoo e-postaları göndermeyi öğreneceksiniz. Ancak, kullandığınız Posta Sunucusu Sağlayıcısı (MSP) için süreç aynıdır.

Yahoo Mail kullandığınız için, hesabınıza giriş yapın. Yahoo e hesap, baş Hesap bilgisi, ve tıklayın hesap Güvenliği sekme. Ardından bir uygulama şifresi oluşturun. Uygulamayı adlandırmanız gerekecek ve ardından Yahoo Mail uygulama için bir şifre oluşturacak ve kodunuzdaki şifreyi posta adresinizle birlikte kullanabilirsiniz.

İçinde Posta göndermek() işlev, üç değişken bildireceksiniz; e-postanızın dizesini tutan bir değişken, e-posta parolanızı tutan bir değişken ve mesaj gönderdiğiniz e-posta adresini tutan bir dize.

:= "[email protected]"
şifre := "aSecurePasswordBurada"
:= "[email protected]"

Bir dilim kullanabilirsiniz ve elemanlar arasında döngü birden fazla alıcıya göndermeyi düşünüyorsanız.

E-posta Ana Bilgisayarını ve Bağlantı Noktasını Alma ve Ayarlama

SMTP protokolü, e-posta kaynağını tanımlamak için ana bilgisayar ve bağlantı noktası numaralarını kullanır. MSP'nizin geldiği yer burasıdır. MSP'nizin kullanmanıza izin verdiği ana bilgisayar ve bağlantı noktası numarasını bilmeniz gerekir.

MSP ana bilgisayarlarının bir listesi için bu kaynağı kontrol edin ve port numaraları Gmail, Yahoo veya Outlook gibi herkese açık e-postalar kullanıyorsanız. Google, Gmail için "daha az güvenli uygulamaları" kapattı; Gmail kullanıyorsanız uygulamanızın güvenliğini sağlamak isteyebilirsiniz.

Bağlantı noktası numarasını ve ana bilgisayar adresini aldıktan sonra, bunları aşağıdaki gibi değişkenlere atayın:

ana bilgisayar := "smtp.mail.yahoo.com"
bağlantı noktası := "465"

Yukarıdaki ana bilgisayar ve bağlantı noktası numaraları, normal hesaplarda kullanım için Yahoo Mail'den alınmıştır. Sunucu smtp.mail.yahoo.com adresinde barındırılmaktadır ve bağlantı noktasını kullanmanıza izin verilmektedir. 465 E-posta göndermek için.

E-postanın İçeriğini Bildirme

Bir sonraki adım, postanın içeriğini değişken olarak bildirmektir. Konu ve gövde mesajı oluşturur.

konu := "Hey, Sadece Seni Kontrol Ediyorum."
body := "Umarım iyisinizdir! Bugün nasılsın. "

bu ders değişken e-postanın konusudur; en gövde değişken, gönderdiğiniz e-postanın gövdesidir.

E-posta Başlıklarını Ayarlama

E-postanın başlıklarını belirtmek için bir dizi haritası yapmanız gerekecek.

başlıklar := Yapmak(harita[sicim]sicim)
headers["Kimden"] = kimden
başlıklar["Kime"] = için
başlıklar["Konu"] = konu
mesaj := ""
için k, v := Aralık başlıklar {
mesaj += fmt. Sprintf("%s: %s\r", k, v)
}
mesaj += "\r" + gövde

İlk olarak, bir dizi anahtar ve değer haritası oluşturursunuz ve yukarıda gösterildiği gibi adresinizin, alıcının adresinin ve konunun başlıklarını ayarlarsınız. Döngü için bir aralık kullanma başlıklar harita, bir İleti değişken, üstbilgileri ve dize biçimlendirmesini kullanarak iletiyi içerecek şekilde bildirildi.

E-postanın Doğrulanması

Kaynağı doğrulamak için e-postanın kimlik doğrulaması gerekiyor. smtp paketi, aşağıdakileri kullanarak e-posta kimlik doğrulaması için işlevsellik sağlar. DüzAuth. bu Düz Yetkilendirme yöntem, kimliği, gönderenin E-postasını, parolasını ve ana bilgisayarı parametre olarak alır ve bir yetki e-postayı göndermek için kullanacağınız nesne.

kimlik doğrulama := smtp. PlainAuth("", kimden, parola, ana bilgisayar)

Kimlik, bu durumda görüldüğü gibi boş bırakılabilen kullanıcı adınızdır.

E-posta için Bağlantı Oluşturma

Bazı posta hizmeti sağlayıcıları, e-postayı bir bağlantı aracılığıyla göndermenizi gerektirir. Bu yazıda, bir TCP bağlantısı TLS yapılandırmaları ile sunucuya.

tlsConfig := &tls. Yapılandır{
InsecureSkipVerify: doğru,
SunucuAdı: ana bilgisayar,
}

Yukarıdaki kodda, referansa bakarak bir TLS yapılandırması yaptınız. yapılandırma nerede yapı GüvensizAtlaDoğrula olarak ayarlandı doğruve sunucu adı ev sahibi değişken.

kullanarak bir TCP bağlantısı oluşturmalısınız. Aramak yöntemi tl paket. bu aramak yöntem, bağlantı türünü (TCP), bu durumda sunucu adresini ve TLS bağlantı yapılandırmalarını alır.


bağlantı, hata := tls. Çevir("tcp", serverAddress, tlsConfig) err != sıfır {
kayıt. Panik (hata)
}

Yukarıdaki kodda bir TCP bağlantısı yaptınız ve hataları ele aldınız; kullanarak yeni bir smtp paketi başlatmış olacaksınız. Yeni müşteri yöntemi ağ/smtp paket. bu Yeni müşteri yöntem sırasıyla bir bağlantı ve ana bilgisayar alır.

smtpClient, hata := smtp. NewClient (bağlantı, ana bilgisayar)
eğer hata != sıfır {
kayıt. Panik (hata)
}

Artık bir smtp istemci örneğinin parametrelerini ayarlamanız gerekir. smtpİstemci ve hataları işlemek.

eğer hata = smtpClient. Yetkilendirme (kimlik doğrulama); hata != sıfır {
kayıt. Panik (hata)
}
eğer hata = smtpClient. Mail şu kişiden geldi); hata != sıfır {
kayıt. Panik (hata)
}
eğer hata = smtpClient. Rcpt (başlıklar["Kime"]); hata != sıfır {
kayıt. Panik (hata)
}

Yukarıdaki örnekte, kimlik doğrulama, gönderen adresi ve alıcı adresi parametrelerini ilgili yöntemlerine ilettiniz ve hataları ele aldınız.

Son olarak, bağlantı örneğine yazmanız gerekir ve bunu kullanarak bir yazar oluşturarak yapabilirsiniz. Veri senin yöntemin smtp istemcisi misal.

yazar, hata := smtpClient. Veri()
eğer hata != sıfır {
kayıt. Panik (hata)
}
_, hata = yazar. Yazmak([]bayt(İleti))
eğer hata != sıfır {
kayıt. Panik (hata)
}

Bir yazar oluşturduktan sonra, mesajın bir bayt dilimini kullanarak yazarsınız. Yazmak Yöntem yukarıdaki örnekte olduğu gibi.

hata = yazar. Kapat()
eğer hata != sıfır {
kayıt. Panik (hata)
}
hata = smtpClient. Çıkış yapmak()
eğer hata != sıfır {
dönüş
}
dönüş "Başarılı, posta gönderildi!"

Yazıcıyı kapatın ve yukarıdaki kodu kullanarak smtp istemci bağlantı örneğinden çıkın. bu Posta göndermek() işlev, yukarıda gösterildiği gibi bir başarı mesajı döndürür.

arandığında Posta göndermek() içinde işlev ana işlevi, konsolunuza kaydedilen başarı mesajını ve alıcınıza gönderilen e-postayı almalısınız.

Net Pakette Daha Fazlası Var

Net paketi, ağ ile ilgili işlevler için birçok paket içerir ve smtp paketi bunlardan sadece biridir. Ağ ile ilgili geliştirme için TCP ve HTTP paketlerini de kullanabilirsiniz.

Arka uç geliştirici değilseniz, net/smtp paketini bunaltıcı bulabilirsiniz. Daha az kod satırıyla hızlı bir şekilde e-posta göndermek için birçok alternatif var. SendGrid, Twilio ve MailChimp gibi e-posta pazarlama şirketlerine ve Substack ve Revue gibi birçok kullanıcıya stres olmadan e-posta göndermenizi sağlayan haber bülteni hizmetlerine göz atabilirsiniz.