إرسال البريد الإلكتروني في C# (.NET): SmtpClient و MailKit و MimeKit
إرسال البريد الإلكتروني هو إحدى المهام الأساسية في التطبيقات الحديثة. في بيئة C# (.NET)، توجد أدوات مدمجة (فئة SmtpClient) ومكتبات خارجية قوية (MailKit و MimeKit). في هذا الدليل، سنشرح بالتفصيل كلا النهجين، مع أمثلة على الكود، وإعداد خادم SMTP، والعمل مع المرفقات ورسائل HTML.
1. SmtpClient المدمج (System.Net.Mail)
فئة SmtpClient متاحة في .NET Framework و .NET Core/5+ (مع بعض القيود). إنها سهلة الاستخدام، لكنها لا تدعم البروتوكولات الحديثة (مثل OAuth2) وتعتبر قديمة للمشاريع الجديدة.
2. تثبيت وربط MailKit
MailKit هي مكتبة متعددة المنصات للعمل مع البريد الإلكتروني. وهي غير متزامنة بالكامل، وتدعم SSL/TLS و OAuth2 و S/MIME وغيرها من الميزات الحديثة. التثبيت عبر NuGet:
dotnet add package MailKitdotnet add package MimeKitأو عبر وحدة تحكم مدير الحزم:
Install-Package MailKitInstall-Package MimeKit3. مثال على إرسال بريد إلكتروني بسيط باستخدام SmtpClient
مثال أساسي باستخدام SmtpClient المدمج:
using System.Net;using System.Net.Mail;
public void SendSimpleEmail(){ var fromAddress = new MailAddress("sender@example.com", "المرسل"); var toAddress = new MailAddress("recipient@example.com", "المستلم"); const string fromPassword = "your_password"; const string subject = "موضوع الرسالة"; const string body = "نص الرسالة";
var smtp = new SmtpClient { Host = "smtp.example.com", Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, Credentials = new NetworkCredential(fromAddress.Address, fromPassword) };
using (var message = new MailMessage(fromAddress, toAddress) { Subject = subject, Body = body }) { smtp.Send(message); }}هام: بالنسبة لـ Gmail و Yandex والخدمات الأخرى، يجب استخدام كلمة مرور التطبيق أو OAuth2.
4. إرسال البريد الإلكتروني باستخدام MailKit (الطريقة الموصى بها)
يوفر MailKit واجهة برمجة تطبيقات أكثر مرونة وحداثة. مثال على إرسال بريد إلكتروني نصي بسيط:
using MailKit.Net.Smtp;using MailKit.Security;using MimeKit;using System.Threading.Tasks;
public async Task SendEmailWithMailKitAsync(){ var message = new MimeMessage(); message.From.Add(new MailboxAddress("المرسل", "sender@example.com")); message.To.Add(new MailboxAddress("المستلم", "recipient@example.com")); message.Subject = "موضوع الرسالة"; message.Body = new TextPart("plain") { Text = "نص الرسالة" };
using (var client = new SmtpClient()) { await client.ConnectAsync("smtp.example.com", 587, SecureSocketOptions.StartTls); await client.AuthenticateAsync("sender@example.com", "your_password"); await client.SendAsync(message); await client.DisconnectAsync(true); }}5. إرسال بريد إلكتروني HTML مع مرفقات
إنشاء بريد إلكتروني متعدد الأجزاء (HTML + مرفقات) باستخدام MimeKit:
public async Task SendHtmlEmailWithAttachmentAsync(){ var message = new MimeMessage(); message.From.Add(new MailboxAddress("المرسل", "sender@example.com")); message.To.Add(new MailboxAddress("المستلم", "recipient@example.com")); message.Subject = "رسالة HTML مع مرفق";
var bodyBuilder = new BodyBuilder { HtmlBody = @"<h1>مرحباً!</h1><p>هذه رسالة HTML مع مرفق.</p>", TextBody = "هذا نص