لماذا يُعد إرسال البريد الإلكتروني عبر Gmail في .NET صداعًا (وكيف تتجنبه)
\n\nإذا سبق لك أن حاولت إعداد إرسال البريد الإلكتروني عبر Gmail في تطبيق .NET الخاص بك، فأنت تعلم أن هذه المهمة تبدو بسيطة ولكنها تتحول إلى رحلة شاقة. تكتب 10 أسطر من الكود، وتشغّل التطبيق، ثم تحصل على خطأ SmtpException برسالة غامضة عن "تطبيق غير آمن". هل يبدو ذلك مألوفًا؟
على Stack Overflow، جمع سؤال "Sending email in .NET through Gmail" آلاف المشاهدات ومئات الإجابات. لسنوات، يعاني المطورون من هذه المشكلة. في هذا المقال، سنستعرض 4 طرق عملية باستخدام C#، من الطرق التقليدية إلى الحلول الحديثة، وسنكتشف أيها يستحق الاستخدام في عام 2025.
\n\nتلميح: الكود الذي وجدته في مدونة من عام 2015 على الأرجح لم يعد يعمل. تواصل Google تشديد سياسات الأمان. لكن لا تقلق — سنقدم لك الحلول الفعّالة.
\n\nالطريقة الأولى: SmtpClient التقليدي (ولماذا أصبح قديمًا)
\n\nالطريقة الأكثر وضوحًا هي استخدام SmtpClient المدمج من System.Net.Mail. إليك كيف كان يبدو الكود في "الأيام الذهبية":
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
SmtpClientتم وضع علامةObsoleteعليه في .NET 5+ \n - لا يدعم بروتوكولات المصادقة الحديثة (OAuth 2.0) \n
- كلمة مرور التطبيق ليست دائمة — يجب تحديثها يدويًا \n
متى تستخدمها: فقط للنماذج الأولية السريعة أو الأدوات الداخلية حيث الأمان ليس حرجًا.
\n\nالطريقة الثانية: MailKit — حديث وقوي
\n\nإذا كنت تبحث عن حل احترافي، استخدم مكتبة MailKit من مطور Mono. إنها لا تعمل فحسب، بل تتطور بنشاط.
\n\nأولاً، قم بتثبيت الحزمة:
\ndotnet add package MailKit\n\nالآن، الكود باستخدام كلمة مرور التطبيق:
\n\nusing 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
ولكن حتى هذه الطريقة لها قيود: كلمة مرور التطبيق هي حل مؤقت. إذا تم اختراق حساب Google الخاص بك، يمكن للمهاجم إرسال رسائل بريد إلكتروني باسمك.
\n\nالطريقة الثالثة: Google API + OAuth 2.0 (للمشاريع الجادة)
\n\nالطريقة الأكثر صحة وأمانًا هي استخدام