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
<PackageReference Include="MsClean.Framework.Mailing" Version="1.10.2" />
<PackageVersion Include="MsClean.Framework.Mailing" Version="1.10.2" />
<PackageReference Include="MsClean.Framework.Mailing" />
paket add MsClean.Framework.Mailing --version 1.10.2
#r "nuget: MsClean.Framework.Mailing, 1.10.2"
#:package MsClean.Framework.Mailing@1.10.2
#addin nuget:?package=MsClean.Framework.Mailing&version=1.10.2
#tool nuget:?package=MsClean.Framework.Mailing&version=1.10.2
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ış
- Proje Yapısı
- Bileşenler
- Kurulum ve Yapılandırma
- Kullanım
- Özellikler
- Mail Gönderim Akışı
- Sık Karşılaşılan Sorunlar
- Geliştirme Önerileri
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
SendEmailAsynctercih 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
ToEmailyerine MimeKit'inMailboxAddresstipi 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:
MimeMessageoluşturur.- From, To, CC ve BCC bilgilerini ekler.
- Subject bilgisini atar.
- Text ve HTML body oluşturur.
UnsubscribeLinkdoluysaList-Unsubscribeheader ekler.- DKIM ayarları yapılandırılmışsa maili imzalar.
- SMTP client oluşturur ve sunucuya bağlanır.
AuthenticationRequiredaktifse 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
UnsubscribeLinkalanı dolu olduğunda mail header'ınaList-Unsubscribeeklenir.- DKIM imzalama için
appsettings.jsoniçindeDkimPrivateKey,DkimSelectorveDomainNamealanları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 | Versions 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. |
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.