إرسال البريد الإلكتروني عبر Gmail في .NET: 4 طرق مع كود C#

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

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

ابدأ الدورة

لماذا يُعد إرسال البريد الإلكتروني عبر Gmail في .NET صداعًا (وكيف تتجنبه)

\n\n

إذا سبق لك أن حاولت إعداد إرسال البريد الإلكتروني عبر Gmail في تطبيق .NET الخاص بك، فأنت تعلم أن هذه المهمة تبدو بسيطة ولكنها تتحول إلى رحلة شاقة. تكتب 10 أسطر من الكود، وتشغّل التطبيق، ثم تحصل على خطأ SmtpException برسالة غامضة عن "تطبيق غير آمن". هل يبدو ذلك مألوفًا؟

\n\n

على Stack Overflow، جمع سؤال "Sending email in .NET through Gmail" آلاف المشاهدات ومئات الإجابات. لسنوات، يعاني المطورون من هذه المشكلة. في هذا المقال، سنستعرض 4 طرق عملية باستخدام C#، من الطرق التقليدية إلى الحلول الحديثة، وسنكتشف أيها يستحق الاستخدام في عام 2025.

\n\n

تلميح: الكود الذي وجدته في مدونة من عام 2015 على الأرجح لم يعد يعمل. تواصل Google تشديد سياسات الأمان. لكن لا تقلق — سنقدم لك الحلول الفعّالة.

\n\n

الطريقة الأولى: SmtpClient التقليدي (ولماذا أصبح قديمًا)

\n\n

الطريقة الأكثر وضوحًا هي استخدام SmtpClient المدمج من System.Net.Mail. إليك كيف كان يبدو الكود في "الأيام الذهبية":

\n\n
using System.Net;\nusing System.Net.Mail;\n\nvar message = new MailMessage("your@gmail.com", "recipient@example.com")\n{\n    Subject = "رسالة اختبار من .NET",\n    Body = "مرحبًا! هذا اختبار."\n};\n\nusing var client = new SmtpClient("smtp.gmail.com", 587)\n{\n    Credentials = new NetworkCredential("your@gmail.com", "your-password"),\n    EnableSsl = true\n};\n\nclient.Send(message);
\n\n

في الفترة بين 2010 و2015، كان هذا الكود يعمل. لكن اليوم، قامت Google بحظر تسجيل الدخول بكلمة المرور العادية لمعظم الحسابات. ستحتاج إلى:

\n
    \n
  • كلمة مرور التطبيق (App Password) — ولكن فقط عند تفعيل المصادقة الثنائية
  • \n
  • أو السماح بـ "الوصول إلى التطبيقات غير الآمنة" — وهذه الخاصية أزالتها Google بالفعل
  • \n
\n\n

عيوب هذه الطريقة:

\n
    \n
  • SmtpClient تم وضع علامة Obsolete عليه في .NET 5+
  • \n
  • لا يدعم بروتوكولات المصادقة الحديثة (OAuth 2.0)
  • \n
  • كلمة مرور التطبيق ليست دائمة — يجب تحديثها يدويًا
  • \n
\n\n

متى تستخدمها: فقط للنماذج الأولية السريعة أو الأدوات الداخلية حيث الأمان ليس حرجًا.

\n\n

الطريقة الثانية: MailKit — حديث وقوي

\n\n

إذا كنت تبحث عن حل احترافي، استخدم مكتبة MailKit من مطور Mono. إنها لا تعمل فحسب، بل تتطور بنشاط.

\n\n

أولاً، قم بتثبيت الحزمة:

\n
dotnet add package MailKit
\n\n

الآن، الكود باستخدام كلمة مرور التطبيق:

\n\n
using MailKit.Net.Smtp;\nusing MimeKit;\n\nvar message = new MimeMessage();\nmessage.From.Add(new MailboxAddress("اسمك", "your@gmail.com"));\nmessage.To.Add(new MailboxAddress("المستلم", "recipient@example.com"));\nmessage.Subject = "رسالة عبر MailKit";\nmessage.Body = new TextPart("plain") { Text = "مرحبًا من .NET!" };\n\nusing var client = new SmtpClient();\nawait client.ConnectAsync("smtp.gmail.com", 587, MailKit.Security.SecureSocketOptions.StartTls);\nawait client.AuthenticateAsync("your@gmail.com", "كلمة-مرور-التطبيق");\nawait client.SendAsync(message);\nawait client.DisconnectAsync(true);
\n\n

لماذا MailKit أفضل من SmtpClient؟

\n
    \n
  • طرق غير متزامنة — لا تمنع تنفيذ الخيط
  • \n
  • دعم MIME والتوقيعات والتشفير
  • \n
  • يعمل على جميع منصات .NET (بما في ذلك .NET MAUI وUnity)
  • \n
  • غير مُعلّم بأنه قديم
  • \n
\n\n

ولكن حتى هذه الطريقة لها قيود: كلمة مرور التطبيق هي حل مؤقت. إذا تم اختراق حساب Google الخاص بك، يمكن للمهاجم إرسال رسائل بريد إلكتروني باسمك.

\n\n

الطريقة الثالثة: Google API + OAuth 2.0 (للمشاريع الجادة)

\n\n

الطريقة الأكثر صحة وأمانًا هي استخدام

المدونات

توصيات الكتب