FluentEmail kullanarak C#'ta E-posta Gönderme
[[academy-video-youtube({"vid": "qSeO9886nRM", "start_time": "0", "title": "C#'ta FluentEmail kullanarak E-posta Gönderme", "creator": "Tim Corey", "length": "30m 36s"})]]
C# ile işlem e-postaları göndermek, birçok kurumsal yazılım çözümünde yaygın bir ihtiyaçtır. Ancak, Tim Corey'nin "FluentEmail kullanarak C# ile E-posta Gönderme" adlı videosunda açıkladığı gibi, bu süreç zor olmak zorunda değil. Basit metin mesajları göndermek, HTML e-postaları göndermek veya toplu e-postaları ele almak isteyip istemediğinizden bağımsız olarak, FluentEmail modern yöntemler ve SMTP protokollerini kullanarak e-posta gönderme işlevselliğini uygulamanın kolay bir yolunu sunar.
Bu makalede, Tim Corey'nin videosunu takip ederek, FluentEmail kullanarak C# içinde e-posta göndermeyi tam olarak öğrenmek için bir süreçten geçeceğiz. Bir SMTP sunucusu kuracak, dinamik HTML e-posta mesajları oluşturacak ve tüm e-posta gönderme sürecini etkili bir şekilde test edeceğiz.
FluentEmail'e Giriş
Tim, arka planı açıklayarak başlıyor: C# ile e-posta göndermek, önceden System.Net.Mail gibi eski araçlara dayanıyordu, ancak .NET 5 ve daha sonraki sürümlerde, bunların çoğu kullanımdan kaldırıldı. İşte FluentEmail, modern bir e-posta kütüphanesi, hem basit mesajlar hem de HTML e-postalar ve satır içi resimler gibi daha sofistike iletişimler için boşluğu doldurur.
Tim, amacın kolayca e-postalar oluşturmak, şablonları kullanmak ve hatta üretim sunucularına bağlanmadan test etmek olduğunu belirtir.
Konsol Uygulamasını Kurma
1:04'te, Tim EmailDemoApp adlı yeni bir Konsol Uygulaması oluşturuyor. UI'a ihtiyacınız olmadığında static void Main(string[] args) veya basitçe public static void Main ile başlamanın ne kadar kolay olduğunu vurguluyor. Temiz başlangıç noktası, yalnızca e-posta gönderim sürecine odaklanmayı sağlar.

Tim, uygulamayı oluşturduktan sonra projeyi .NET 5'e hedefleyecek şekilde ayarlıyor. Bu, geleneksel .NET Framework'e göre modern bir yükseltemedir ve e-posta istemcileri için modern protokollerle daha iyi uyumluluk sağlar.
FluentEmail'in Paket Yöneticisi Konsolu ile Kurulması
Sonraki 3:50'de Tim, bir SMTP istemcisini kullanarak C# dilinde e-posta gönderimi sağlamak için FluentEmail.Smtp paketini yüklemek amacıyla Paket Yöneticisi Konsolu'nu kullanır. Bunun yanı sıra, Tim, MailGun ve SendGrid gibi ek entegrasyonların da olduğunu belirtir ancak SMTP, çoğu e-posta istemcisi ve yapılandırması ile çalışan en evrensel seçenektir.

Aşağıdaki komutu kullanarak, onu manuel olarak yükleyebilirsiniz:
Install-Package FluentEmail.SmtpInstall-Package FluentEmail.SmtpTim, kütüphanenin çalışması için gerekli olan FluentEmail.Core bağımlılığını da eklediğimizden emin olur.
SMTP İstemcisini ve Sunucusunu Yapılandırma
6:10'da Tim, yeni bir SmtpClient yapılandırması kullanarak SMTP istemcisini ayarlama konusunu tartışır:
var sender = new SmtpSender(() => new SmtpClient("localhost")
{
EnableSsl = false,
DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,
PickupDirectoryLocation = @"C:\Demos"
});var sender = new SmtpSender(() => new SmtpClient("localhost")
{
EnableSsl = false,
DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,
PickupDirectoryLocation = @"C:\Demos"
});Tim, localhost üzerindeki bu SMTP sunucusunun yerel test için olduğunu vurgular. Üretimde, Gmail'in SMTP bitiş noktası gibi gerçek SMTP sunucu ayrıntılarına, güvenlik için bir uygulama şifresi kullanarak bağlanırsınız.
Hassas ayarların daha iyi güvenlik ve esneklik için appsettings.json gibi bir yapılandırma dosyasına taşınması gerektiğini vurguluyor.
Basit Bir E-Posta Mesajı Gönderme
11:59'da Tim, FluentEmail'ın e-posta API'sini kullanarak basit bir mesaj göndermeye geçer. Şu kod örneği ile bir var email nesnesinin oluşturulduğunu açıklar:
var email = await Email
.From("tim@timco.com")
.To("test@test.com", "Sue")
.Subject("Thanks")
.Body("Thanks for buying our product.")
.SendAsync();var email = await Email
.From("tim@timco.com")
.To("test@test.com", "Sue")
.Subject("Thanks")
.Body("Thanks for buying our product.")
.SendAsync();Bu yöntemle, string konusunu, string e-posta adresini ve mesaj içeriğini yöntem zinciri kullanarak açıkça belirtebilirsiniz. Bu var message (email), hata kontrolüne olanak tanıyarak sonucu tutar.
Tim, e-postanın tim@timco.com'dan geliyormuş gibi görünmesine rağmen, SMTP sunucusunun giriş bilgilerine (örneğin bir Gmail uygulama şifresi gibi) dayalı olarak hala kimlik doğrulayacağını belirtir.
E-postayı Yerel Dizin Kullanarak Görüntüleme
E-posta mesajı gönderildikten sonra, Tim bunun yerel klasörde .eml dosyası olarak nasıl göründüğünü gösteriyor. Outlook veya Notepad ile açabilseniz de, mevcut e-posta mesajları veya toplu testler için en kullanıcı dostu seçenek değildir.

Daha Kolay Test İçin Papercut SMTP Kullanma
17:03'te Tim, bir dizine kaydetmekten Papercut SMTP, hafif bir sahte SMTP sunucusu kullanmaya geçiyor.
SMTP istemci ayarlarını şu şekilde değiştirir:
DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;Papercut ile her test e-postası anında bir GUI'de görünür. Bu, düz metin ve HTML gövde içeriğini kontrol etmeyi çok daha kolay hale getirir ve gerçek e-posta istemcilerinin farklı formatları nasıl görüntülediğini simüle eder.

Razor Şablonları ile HTML E-posta Oluşturma
19:12'de Tim, statik düz metnin birçok gerçek dünya durumu için yeterli olmadığını belirtir. Daha dinamik, zengin HTML mesajları için, FluentEmail.Razor paketini kurar:
Install-Package FluentEmail.RazorInstall-Package FluentEmail.RazorProje ayarlarını şu şekilde günceller:
<PreserveCompilationContext>true</PreserveCompilationContext><PreserveCompilationContext>true</PreserveCompilationContext>Razor şablonlarının doğru şekilde derlendiğinden emin olmak için.
Razor E-posta Şablonu Oluşturma ve Kullanma
Tim, bir string builder (var builder) ve Razor söz dizimini kullanarak, dinamik bir e-posta şablonu oluşturur:
var builder = new StringBuilder();
builder.AppendLine("Dear @Model.FirstName,");
builder.AppendLine("<p>Thanks for purchasing @Model.ProductName.</p>");
builder.AppendLine("The TimCo Team");var builder = new StringBuilder();
builder.AppendLine("Dear @Model.FirstName,");
builder.AppendLine("<p>Thanks for purchasing @Model.ProductName.</p>");
builder.AppendLine("The TimCo Team");Daha sonra bu şablonu aşağıdaki kodu kullanarak var request'e ekler:
await Email
.UsingTemplate(builder.ToString(), new { FirstName = "Tim", ProductName = "Bacon Wrapped Bacon" })
.SendAsync();await Email
.UsingTemplate(builder.ToString(), new { FirstName = "Tim", ProductName = "Bacon Wrapped Bacon" })
.SendAsync();Bu teknik, şablon içeriğine bağlı olarak düz metin ve HTML gövde gibi farklı formatları destekler.
Birden Fazla Alıcı ve Ekleri Yönetmek
Tim'in demosunda tam olarak detaylandırılmasa da, FluentEmail .To() çağrıları aracılığıyla birden fazla alıcıyı kolayca destekler ve eski .NET'te MailMessage nesnesi veya MailMessage sınıfının nasıl çalıştığına benzer şekilde dosya ekleri için bir ek nesnesi ekler.
Satır içi görüntüler için yeni bir dizge dosya yolu veya içerik kimliği kullanarak ekler oluşturabilirsiniz.
E-posta Gönderme Sürecinde Hata Yönetimi
Tim, hataların nazikçe ele alınması gerektiğini işaret ediyor. Örneğin:
try
{
var result = await Email.SendAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}try
{
var result = await Email.SendAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}Bu, özellikle SMTP protokolü sorunları ortaya çıktığında, e-posta gönderim süreci sırasında meydana gelebilecek herhangi bir SMTP veya ağ ile ilgili hatayı yakalar.
Özet ve Son Düşünceler
27:56 civarında, Tim, FluentEmail ile C#'ta e-posta göndermenin basit hale geldiğini — 'merhaba dünya' tarzı basit mesajlardan profesyonel, dinamik HTML e-postalara kadar değinir.
Ayrıca, yerel geliştirme ile Azure Portal gibi bulut platformları arasında geçiş yaparken SMTP sunucu detaylarını ve yapılandırmalarını appsettings.json gibi bir yapılandırma dosyası kullanarak esnek tutmanın önemini vurgular.
İster bireysel ister toplu e-postalar göndermeyi hedefleyin, FluentEmail ile Papercut SMTP, birçok programlama dili ve ekosistemle uyumlu modern ve verimli bir iş akışı sunar.
Son Düşünceler
Tim Corey'nin mükemmel videosu sayesinde modern e-posta gönderim işlevselliğinin C#'ta temel SmtpClient sınıfı ve MailMessage sınıfı işlemelerinin ötesine geçtiği açıktır. FluentEmail yardımıyla geliştiriciler, yeni bir proje hızla oluşturabilir, bir SMTP bağlantısını yapılandırabilir, dinamik bir e-posta gövdesi hazırlayabilir ve üretim ortamına dağıtmadan önce her şeyi yerel olarak test edebilirler.

