إرسال البريد الإلكتروني في C# (.NET) باستخدام SmtpClient وMailKit

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

إرسال البريد الإلكتروني في C# (.NET): من SmtpClient إلى MailKit

يعد إرسال رسائل البريد الإلكتروني إحدى المهام الأساسية عند تطوير تطبيقات الويب وخدمات الإشعارات والأنظمة المؤسسية. في نظام .NET البيئي، توجد أدوات مدمجة ومكتبات خارجية تعمل على تبسيط العمل مع SMTP وSSL/TLS والسيناريوهات المعقدة. في هذه المقالة، سنشرح بالتفصيل كيفية إرسال بريد إلكتروني في C# باستخدام SmtpClient الكلاسيكي والمكتبة الحديثة MailKit.



1. SmtpClient المدمج (System.Net.Mail)

الفئة SmtpClient متاحة في .NET Framework و.NET Core/5+ (مع بعض القيود). تسمح لك بإعداد إرسال البريد الإلكتروني بسرعة عبر أي خادم SMTP.



مثال أساسي لإرسال البريد الإلكتروني

using System.Net;using System.Net.Mail;

var smtpClient = new SmtpClient("smtp.gmail.com"){ Port = 587, Credentials = new NetworkCredential("your_email@gmail.com", "your_app_password"), EnableSsl = true};

var mailMessage = new MailMessage{ From = new MailAddress("your_email@gmail.com"), Subject = "رسالة اختبار من C#", Body = "مرحباً! هذه الرسالة مرسلة عبر SmtpClient.", IsBodyHtml = false};

mailMessage.To.Add("recipient@example.com");

try{ smtpClient.Send(mailMessage); Console.WriteLine("تم إرسال البريد الإلكتروني بنجاح!");}catch (Exception ex){ Console.WriteLine($"خطأ في الإرسال: {ex.Message}");}

هام: بالنسبة لـ Gmail، ستحتاج إلى كلمة مرور التطبيق، وليس كلمة المرور العادية. بالنسبة للخدمات الأخرى (Yandex، Mail.ru)، تحقق من إعدادات SMTP.



إرسال بريد إلكتروني بتنسيق HTML مع مرفق

var message = new MailMessage();message.From = new MailAddress("sender@example.com");message.To.Add("user@example.com");message.Subject = "التقرير الشهري";message.IsBodyHtml = true;message.Body = "<h2>التقرير الشهري</h2><p>مرفق ملف PDF.</p>";

// إضافة مرفقvar attachment = new Attachment(@"C:\\Reports\\report.pdf");message.Attachments.Add(attachment);

using (var client = new SmtpClient("smtp.example.com", 587)){ client.Credentials = new NetworkCredential("login", "password"); client.EnableSsl = true; client.Send(message);}

يمكن أن تكون المرفقات من أي نوع: صور، مستندات، أرشيفات. للإرسال من الذاكرة، استخدم MemoryStream.



2. الإرسال غير المتزامن

في التطبيقات الحديثة، يُفضل عدم حظر الخيط. استخدم SendMailAsync:

public async Task SendEmailAsync(){    using var client = new SmtpClient("smtp.example.com", 587);    client.Credentials = new NetworkCredential("login", "password");    client.EnableSsl = true;

var message = new MailMessage("from@example.com", "to@example.com") { Subject = "إرسال غير متزامن", Body = "هذه الرسالة مرسلة بشكل غير متزامن." };

await client.SendMailAsync(message); Console.WriteLine("تم الإرسال بشكل غير متزامن!");}


3. مشاكل SmtpClient والبدائل

على الرغم من بساطته، يعاني SmtpClient من عيوب:

  • API قديم (تم وضع علامة عليه كقديم في .NET 5+)؛
  • دعم ضعيف لبروتوكولات المصادقة الحديثة (OAuth2)؛
  • عدم وجود دعم مدمج لـ S/MIME والسيناريوهات المتقدمة.

لذلك، توصي Microsoft باستخدام مكتبات خارجية مثل MailKit.



4. MailKit — مكتبة حديثة للعمل مع البريد الإلكتروني

MailKit هي مكتبة مفتوحة المصدر متعددة المنصات. تدعم SMTP وPOP3 وIMAP وSSL/TLS وعدم التزامن وOAuth2 وغير ذلك الكثير.



التثبيت عبر NuGet

\

توصيات