Kimlik doğrulama ve diğer birçok amaç için programları kullanarak birçok hesaba sık sık 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-postaları almak içindir.
Go, 8BITMIME, AUTH ve STARTTLS uzantılarını da içeren net/smtp paketinde RFC tarafından tanımlanan e-posta ile ilgili etkinlikler için işlevsellik sağlar.
Bu projede kullanılan kod bir GitHub Deposunda mevcuttur 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, dolayısıyla herhangi bir harici paket kurmanız gerekmez. Paketi kullanmadan önce yalnızca içe aktarmanız gerekir.
import (n “net/smtp”n “log”n “crypto/tls”n “fmt”n)n
Ayrıca, hataları konsola kaydetmek için günlük paketini ve güvenli bir bağlantı yapılandırmak için crypto/tls paketini içe aktarmanız gerekecektir.
net/smtp paketini içe aktardıktan sonra, postayı göndermek için bir SendMail() işlevi yazmalı ve ardından işlevi ana işlevde çağırmalısınız.
func main() {n fmt.Print(SendMail())n}nfunc SendMail() string { n // Add code here n}n
SendMail() 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, Yahoo Mail hesabınıza giriş yapın, Hesap Bilgileri’ne gidin ve Hesap Güvenliği sekmesine tıklayın. Ardından bir uygulama parolası oluşturun. Uygulamayı adlandırmanız gerekecek ve ardından Yahoo Mail uygulama için bir parola oluşturacak ve bu parolayı posta adresinizle birlikte kodunuzda kullanabilirsiniz.
Yahoo mail şifre kullanıcı arayüzü oluşturur
SendMail() işlevinde üç değişken bildireceksiniz ; e-postanızın dizesini tutan bir değişken, e-posta şifrenizi tutan bir değişken ve mesaj gönderdiğiniz e-posta adresini tutan bir dize.
from := “yourMail@gmail.com”npassword := “aSecurePasswordHere”nto := “anemail@gmail.com”n
Öğeleri birden çok alıcıya göndermeyi düşünüyorsanız, bir dilim kullanabilir ve öğeler arasında geçiş yapabilirsiniz.
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 devreye girdiği yer burasıdır. MSP’nizin kullanmanıza izin verdiği ana bilgisayarı ve bağlantı noktası numarasını bilmeniz gerekir.
Gmail, Yahoo veya Outlook gibi genel e-postalar kullanıyorsanız , MSP ana bilgisayarlarının ve bağlantı noktası numaralarının listesi için bu kaynağı kontrol edin . 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:
host := “smtp.mail.yahoo.com”nport := “465”n
Yukarıdaki ana bilgisayar ve bağlantı noktası numaraları, normal hesaplarda kullanım için Yahoo Mail’den alınmıştır. Sunucu smtp’de barındırılmaktadır . posta . yahoo . com ve E-posta göndermek için 465 numaralı bağlantı noktasını kullanmanıza izin verilir .
E-postanın İçeriğini Bildirme
Bir sonraki adım, postanın içeriğini değişkenler olarak bildirmektir. Konu ve gövde mesajı oluşturur.
subject := “Hey, I’m Just Checking On You.”nbody := “Hope you’re doing okay! How are you doing today. “n
Konu değişkeni, e-postanın konusudur ; body değişkeni, 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 dize haritası oluşturmanız gerekecek.
headers := make(map[string]string)nheaders[“From”] = fromnheaders[“To”] = tonheaders[“Subject”] = subjectnmessage := “”nfor k, v := range headers {n message += fmt.Sprintf(“%s: %sr”, k, v)n}nmessage += “r” + bodyn
Öncelikle, dize anahtarları ve değerlerinin bir haritasını oluşturursunuz ve adresinizin başlıklarını, alıcının adresini ve konuyu yukarıda gösterildiği gibi ayarlarsınız. Başlıklar haritasında bir aralık for-loop kullanılarak, başlıkları ve dize formatlaması kullanan mesajı içeren bir mesaj değişkeni bildirilir.
E-postanın Doğrulanması
E-postanın, kaynağı doğrulamak için kimlik doğrulaması gerekiyor. Smtp paketi, PlainAuth kullanarak e-posta kimlik doğrulaması için işlevsellik sağlar . PlainAuth yöntemi, kimliği, gönderenin E – postasını , parolasını ve ana bilgisayarı parametre olarak alır ve e-postayı göndermek için kullanacağınız bir Auth nesnesi döndürür.
authenticate := smtp.PlainAuth(“”, from, password, host)n
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ımızda TLS konfigürasyonları ile sunucuya TCP bağlantısı yapacağız.
tlsConfig := &tls.Config{n InsecureSkipVerify: true,n ServerName: host,n}n
Yukarıdaki kodda, InsecureSkipVerify’ın true olarak ayarlandığı ve sunucu adının ana bilgisayar değişkenine atandığı Config yapısına başvurarak bir TLS yapılandırması yaptınız.
tls paketinin Dial yöntemini kullanarak bir TCP bağlantısı oluşturmalısınız . Çevirme yöntemi, bağlantı türünü (TCP), bu durumda sunucu adresini ve TLS bağlantı yapılandırmalarını alır.
nconnection, err := tls.Dial(“tcp”, serverAddress, tlsConfig) err != nil {n log.Panic(err)n}n
Yukarıdaki kodda, bir TCP bağlantısı yaptınız ve hataları ele aldınız; net/smtp paketinin NewClient yöntemini kullanarak yeni bir smtp paketi başlatmış olacaksınız . NewClient yöntemi, sırasıyla bir bağlantı ve ana bilgisayar alır .
smtpClient, err := smtp.NewClient(connection, host)nif err != nil {n log.Panic(err)n}n
Artık bir smtp istemci örneği oluşturduğunuza göre, smtpClient’in parametrelerini ayarlamanız ve hataları işlemeniz gerekir.
if err = smtpClient.Auth(authenticate); err != nil {n log.Panic(err)n}nif err = smtpClient.Mail(from); err != nil {n log.Panic(err)n}nif err = smtpClient.Rcpt(headers[“To”]); err != nil {n log.Panic(err)n}n
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, smtp istemci örneğinizin Data yöntemini kullanarak bir yazar oluşturarak yapabilirsiniz.
writer, err := smtpClient.Data()nif err != nil {n log.Panic(err)n}n_, err = writer.Write([]byte(message))nif err != nil {n log.Panic(err)n}n
Bir yazıcı oluşturduktan sonra yukarıdaki örnekteki gibi Write yöntemini kullanarak mesajın bir bayt dilimini yazarsınız .
err = writer.Close()nif err != nil {n log.Panic(err)n}nerr = smtpClient.Quit()nif err != nil {n return n}nreturn “Successful, the mail was sent!”n
Yazıcıyı kapatın ve yukarıdaki kodu kullanarak smtp istemci bağlantı örneğinden çıkın. SendMail() işlevi , yukarıda gösterildiği gibi bir başarı mesajı döndürür.
Ana işlevde SendMail() işlevi çağrıldığında, başarı mesajını konsolunuza kaydetmeli ve e-postayı alıcınıza göndermelisiniz.
E-postanın başarıyla gönderildiğinin kanıtı
Net Paketinde Daha Fazlası Var
Net paketi, ağla ilgili işlevler için birçok paket içerir ve smtp paketi bunlardan sadece bir tanesidir. Ağla ilgili geliştirme için TCP ve HTTP paketlerini de kullanabilirsiniz.
Bir arka uç geliştiricisi değilseniz net/smtp paketini bunaltıcı bulabilirsiniz. Daha az kod satırıyla hızlı bir şekilde e-posta göndermek için başka birçok alternatif vardır. SendGrid, Twilio ve MailChimp gibi e-posta pazarlama şirketlerine ve birçok kullanıcıya stressiz bir şekilde e-posta göndermenizi sağlayan Substack ve Revue gibi haber bülteni hizmetlerine göz atabilirsiniz.