MsClean.Framework.Mailing 1.10.2

dotnet add package MsClean.Framework.Mailing --version 1.10.2
                    
NuGet\Install-Package MsClean.Framework.Mailing -Version 1.10.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="MsClean.Framework.Mailing" Version="1.10.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="MsClean.Framework.Mailing" Version="1.10.2" />
                    
Directory.Packages.props
<PackageReference Include="MsClean.Framework.Mailing" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add MsClean.Framework.Mailing --version 1.10.2
                    
#r "nuget: MsClean.Framework.Mailing, 1.10.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package MsClean.Framework.Mailing@1.10.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=MsClean.Framework.Mailing&version=1.10.2
                    
Install as a Cake Addin
#tool nuget:?package=MsClean.Framework.Mailing&version=1.10.2
                    
Install as a Cake Tool

MsClean.Framework.Mailing

.NET projelerinde SMTP üzerinden merkezi ve yapılandırılabilir mail gönderimi için MailKit/MimeKit tabanlı servis kütüphanesi.

Yazar: Yusuf Günay


İçindekiler


Genel Bakış

MsClean.Framework.Mailing, mail gönderme sorumluluğunu uygulamanın geneline dağıtmak yerine tek bir servis katmanında toplamak amacıyla tasarlanmıştır.

Kütüphane; HTML mail, düz metin mail, CC/BCC desteği, ek dosya gönderimi, List-Unsubscribe header ve DKIM imzalama özelliklerini sağlar.

Kullanılan Kütüphaneler

Kütüphane Görevi
MailKit SMTP bağlantısı kurar ve mail iletimini gerçekleştirir.
MimeKit Mail mesajını MIME formatına göre oluşturur.

Proje Yapısı

MsClean.Framework.Mailing
├── Abstraction
│   └── IMailService.cs
├── Models
│   ├── Mail.cs
│   ├── MailSettings.cs
│   └── ToEmail.cs
└── Providers
    └── MailKit
        └── MailKitMailService.cs

Bileşenler

IMailService

Mail gönderme servisinin sözleşmesidir. Uygulama katmanı doğrudan MailKitMailService yerine bu interface üzerinden çalışır. Bu yapı, ilerleyen süreçte farklı mail sağlayıcılarına geçişi kolaylaştırır.

public interface IMailService
{
    void SendMail(Mail mail);
    Task SendEmailAsync(Mail mail);
}

Web uygulamalarında SendEmailAsync tercih edilmelidir.


Mail

Gönderilecek mailin içeriğini taşıyan modeldir.

Özellik Açıklama
Subject Mail konusu
TextBody Düz metin içerik
HtmlBody HTML içerik
ToList Ana alıcı listesi (boş bırakılırsa mail gönderilmez)
CcList Bilgi alıcıları
BccList Gizli alıcılar
Attachments Ek dosyalar
UnsubscribeLink List-Unsubscribe header için kullanılır

MailSettings

SMTP bağlantı ve DKIM imzalama ayarlarını taşır.

Özellik Açıklama
Server SMTP sunucu adresi
Port SMTP port numarası
SenderFullName Gönderenin görünen adı
SenderEmail Gönderen mail adresi
UserName SMTP kullanıcı adı
Password SMTP şifresi
AuthenticationRequired SMTP login zorunluluğu
DkimPrivateKey DKIM private key
DkimSelector DKIM selector değeri
DomainName DKIM domain adı

Yaygın Port Yapılandırmaları

Port Protokol
587 STARTTLS
465 SSL/TLS
25 Klasik SMTP

ToEmail

Alıcı bilgisini taşıyan basit modeldir. Email ve FullName alanlarından oluşur.

Mevcut implementasyonda doğrudan ToEmail yerine MimeKit'in MailboxAddress tipi kullanılmaktadır.


MailKitMailService

IMailService interface'ini uygulayan gerçek gönderim servisidir. Constructor üzerinden MailSettings alır ve SMTP bağlantısını bu ayarlara göre kurar.

emailPrepare Metodu

Gönderim öncesi MimeMessage nesnesini ve SMTP client'ı hazırlar:

  1. MimeMessage oluşturur.
  2. From, To, CC ve BCC bilgilerini ekler.
  3. Subject bilgisini atar.
  4. Text ve HTML body oluşturur.
  5. UnsubscribeLink doluysa List-Unsubscribe header ekler.
  6. DKIM ayarları yapılandırılmışsa maili imzalar.
  7. SMTP client oluşturur ve sunucuya bağlanır.
  8. AuthenticationRequired aktifse kimlik doğrulama yapar.

Kurulum ve Yapılandırma

appsettings.json

{
  "MailSettings": {
    "Server": "smtp.example.com",
    "Port": 587,
    "SenderFullName": "MsClean System",
    "SenderEmail": "noreply@example.com",
    "UserName": "noreply@example.com",
    "Password": "smtp-password",
    "AuthenticationRequired": true
  }
}

⚠️ SMTP şifresi kaynak koda yazılmamalıdır. Geliştirme ortamında User Secrets, production ortamında güvenli bir secret yönetim sistemi kullanılmalıdır.


Program.cs — Servis Kaydı

var mailSettings = builder.Configuration.GetSection("MailSettings").Get<MailSettings>();
builder.Services.AddSingleton(mailSettings!);
builder.Services.AddScoped<IMailService, MailKitMailService>();

Bu kayıttan sonra IMailService, herhangi bir controller veya servis sınıfına inject edilebilir.


Kullanım

Temel Mail Gönderimi

var mail = new Mail
{
    Subject = "Test Mail",
    TextBody = "Bu bir test mailidir.",
    HtmlBody = "<p>Bu bir test mailidir.</p>",
    ToList = [new MailboxAddress("Yusuf", "yusuf@example.com")]
};

await _mailService.SendEmailAsync(mail);

CC, BCC ve Ek Dosya

var mail = new Mail
{
    Subject = "Rapor",
    HtmlBody = "<p>Ekteki raporu inceleyebilirsiniz.</p>",
    TextBody  = "Ekteki raporu inceleyebilirsiniz.",
    ToList    = [new MailboxAddress("Alıcı", "alici@example.com")],
    CcList    = [new MailboxAddress("Bilgi", "bilgi@example.com")],
    BccList   = [new MailboxAddress("Gizli", "gizli@example.com")],
    Attachments = [ /* MimePart nesneleri */ ]
};

await _mailService.SendEmailAsync(mail);

Unsubscribe ve DKIM

  • UnsubscribeLink alanı dolu olduğunda mail header'ına List-Unsubscribe eklenir.
  • DKIM imzalama için appsettings.json içinde DkimPrivateKey, DkimSelector ve DomainName alanlarının tanımlı olması gerekir.

Mail Gönderim Akışı

Mail nesnesi hazırlanır
        │
        ▼
IMailService.SendEmailAsync çağrılır
        │
        ▼
MimeMessage oluşturulur
        │
        ▼
From / To / CC / BCC bilgileri eklenir
        │
        ▼
Text ve HTML body eklenir
        │
        ├─► UnsubscribeLink varsa → List-Unsubscribe header eklenir
        │
        ├─► DKIM ayarları varsa → Mail imzalanır
        │
        ▼
SMTP client oluşturulur, sunucuya bağlanılır
        │
        ▼
AuthenticationRequired = true → Kimlik doğrulama yapılır
        │
        ▼
Mail gönderilir → Bağlantı kapatılır

Sık Karşılaşılan Sorunlar

Belirti Olası Neden Çözüm
Mail gönderilmiyor ToList boş ToList içinde en az bir alıcı tanımlandığından emin olun.
Authentication hatası Yanlış kimlik bilgisi UserName ve Password değerlerini kontrol edin.
TLS hatası Yanlış port veya güvenlik modu Port ve SecureSocketOptions ayarlarını doğrulayın.
Mail spam'e düşüyor Eksik DNS kayıtları SPF, DKIM ve DMARC kayıtlarını kontrol edin.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.10.2 99 6/9/2026
1.10.1 313 5/12/2026
1.10.0 354 11/12/2025
1.0.1 201 10/22/2025
1.0.0 197 10/16/2025