أنا أستخدم الكود التالي لإرسال البريد الإلكتروني. يعمل الرمز بشكل صحيح في الجهاز المحلي الخاص بي. ولكن على خادم الإنتاج أحصل على رسالة الخطأ
var fromAddress = new MailAddress("[email protected]");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("[email protected]");
string subject = "subject";
string body = "body";
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = System.Net.Mail.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 A/c ، تلقيت رسالة البريد الإلكتروني التالية بعد تشغيل الرمز من خادم الإنتاج
مرحبا ،
استخدم شخص ما كلمة المرور مؤخرًا لمحاولة تسجيل الدخول إلى حساب Google الخاص بك [email protected] كان هذا الشخص يستخدم تطبيقًا مثل البريد الإلكتروني أو العميل أو الجهاز المحمول.
لقد منعنا محاولة تسجيل الدخول في حالة محاولة الخاطف الوصول إلى حسابك. الرجاء مراجعة تفاصيل محاولة تسجيل الدخول:
الجمعة ، 3 يناير 2014 13:56:08 الساعة UTC عنوان IP: xxx.xx.xx.xxx (abcd.net.) الموقع: Philadelphia PA ، Philadelphia ، PA ، الولايات المتحدة الأمريكية
إذا لم تتعرف على محاولة تسجيل الدخول هذه ، فقد يحاول شخص آخر الوصول إلى حسابك. يجب عليك تسجيل الدخول إلى حسابك وإعادة تعيين كلمة المرور الخاصة بك على الفور.
إعادة تعيين كلمة المرور
إذا كنت أنت وأنت تواجه مشكلة في الوصول إلى حسابك ، فاستكمل خطوات تحري الخلل وإصلاحه الواردة في http://support.google.com/mail؟p=client_login
مع خالص تحياتك ، فريق حسابات Google
يحدث هذا عمومًا عند محاولة تسجيل الدخول من منطقة زمنية مختلفة أو كمبيوتر عنوان IP. يوجد خادم الإنتاج ومعرف البريد الذي استخدمته في منطقة زمنية مختلفة. اختر أيًا من هذين الحلين:
1) قم بتسجيل الدخول إلى خادم الإنتاج عبر الوصول عن بُعد ، وقم بتسجيل الدخول إلى gmail مرة واحدة باستخدام بيانات اعتمادك. سوف يطلبون التأكيد ، تأكيده وتسجيل الخروج.
أو 2) تسجيل الدخول gmail إلى جهاز الكمبيوتر المحلي الخاص بك ، اتبع هذا رابط واختر راجع هذا النشاط واتخاذ الإجراءات المناسبة.
عند محاولة إرسال بريد من التعليمات البرمجية وتجد الخطأ "يتطلب خادم SMTP اتصالًا آمنًا أو لم تتم مصادقة العميل. استجابة الخادم كانت: 5.5.1 المصادقة مطلوبة" ، مما قد يحدث الخطأ بسبب الحالات التالية.
الحالة 1: عندما تكون كلمة المرور خاطئة
الحالة 2: عند محاولة تسجيل الدخول من بعض التطبيقات
الحالة 3: عند محاولة تسجيل الدخول من المجال بخلاف منطقتك الزمنية/المجال/الكمبيوتر (هذه هي الحالة في معظم السيناريوهات عند إرسال بريد من الرمز)} _
هناك حل لكل
حل للحالة 1: أدخل كلمة المرور الصحيحة.
الحل 1 للحالة 2 : انتقل إلى إعدادات الأمان على الرابط التالي https://www.google.com/settings/security/lesssecureapps وتمكين التطبيقات الأقل أمانًا . حتى تتمكن من تسجيل الدخول من جميع التطبيقات.
الحل 2 للحالة 2 :( انظر https://stackoverflow.com/a/9572958/52277 ) تمكين المصادقة ثنائية العامل (ويعرف أيضًا باسم التحقق بخطوتين) ، ثم قم بإنشاء تطبيق كلمة المرور الخاصة. استخدم كلمة المرور التي تم إنشاؤها حديثًا للمصادقة عبر SMTP.
الحل 1 للحالة 3: (قد يكون هذا مفيدًا) تحتاج إلى مراجعة النشاط. لكن مراجعة النشاط لن تكون مفيدة نظرًا لأحدث معايير الأمان ، فإن الرابط لن يكون مفيدًا. لذا جرب الحالة أدناه.
الحل 2 للحالة 3 : إذا كنت قد قمت باستضافة الكود الخاص بك في مكان ما على خادم الإنتاج وإذا كان لديك حق الوصول إلى خادم الإنتاج ، فاحصل على اتصال سطح المكتب البعيد بخادم الإنتاج وحاول تسجيل الدخول مرة واحدة من مستعرض خادم الإنتاج. سيؤدي ذلك إلى إضافة excpetioon لتسجيل الدخول إلى google وسيُسمح لك بتسجيل الدخول من الرمز.
ولكن ماذا لو لم تتمكن من الوصول إلى خادم الإنتاج.جرب الحل 3
الحل 3 للحالة 3:عليك تمكين تسجيل الدخول من منطقة زمنية أخرى/ip لحساب google الخاص بك.
للقيام بذلك ، اتبع الرابط https://g.co/allowaccess والسماح بالوصول بالنقر فوق الزر "متابعة".
وهذا كل شيء. ها أنت ذا. الآن سوف تكون قادرًا على تسجيل الدخول من أي جهاز كمبيوتر وأي وسيلة تطبيق إلى حساب google الخاص بك.
في مشكلة أمنية ، Gmail بشكل افتراضي يمنع الوصول إلى حساب البريد الإلكتروني الخاص بك من التطبيقات المخصصة. يمكنك إعداده لقبول تسجيل الدخول من التطبيق الخاص بك.
بعد تسجيل الدخول إلى بريدك الإلكتروني ، انقر هنا
سينقلك هذا إلى الصفحة التالية
بعد قضاء ساعتين اليوم في تجربة كل حل هنا ، ما زلت غير قادر على تجاوز هذا الخطأ بالضبط. لقد استخدمت gmail عدة مرات بهذه الطريقة لذلك كنت أعرف أنه شيء غبي ، لكن لا شيء قمت به لحل المشكلة. تعثرت أخيرًا على الحل في حالتي ، لذا اعتقدت أنني سأشاركه.
أولاً ، معظم الإجابات المذكورة أعلاه مطلوبة أيضًا ، ولكن في حالتي ، كانت مسألة ترتيب الكود بسيطة عند إنشاء فئة SmtpClient.
في مقتطف الشفرة الأول أدناه ، لاحظ مكان سطر "بيانات الاعتماد = الأرصدة". سيقوم هذا التطبيق بإنشاء الخطأ المشار إليه في هذا السؤال حتى إذا كان لديك كل شيء آخر تم إعداده بشكل صحيح.
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
Host = Emailer.Host,
Port = Emailer.Port,
Credentials = creds,
EnableSsl = Emailer.RequireSSL,
UseDefaultCredentials = false,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
}
ومع ذلك ، إذا قمت بنقل مكالمة تعيين مؤهلات اعتماد إلى أسفل ، فسيتم إرسال البريد الإلكتروني دون خطأ. لم أجري أي تغييرات على الكود المحيط ... أي ... اسم المستخدم/كلمة المرور ، إلخ. بشكل واضح ، إما أن EnableSSL أو UseDefaultCredentials أو DeliveryMethod تعتمد على مؤهلات الاعتماد التي تم تعيينها أولاً .... لم أختبر جميع لمعرفة أي واحد كان على الرغم من.
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
Host = Emailer.Host,
Port = Emailer.Port,
EnableSsl = Emailer.RequireSSL,
UseDefaultCredentials = false,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
Credentials = creds
}
آمل أن يساعد هذا في إنقاذ شخص آخر بعض الصداع في المستقبل.
مرحباً ، كان لي نفس المشكلة ،
ماذا فعلت لحلها. هو تشغيل التطبيق الأقل أمانًا. بعد الاتصال بحساب gmail الخاص بي. لقد أدخلت هذا الرابط: https://www.google.com/settings/security/lesssecureapps
ثم أقوم بتشغيل التطبيق الآمن و نجحت. لقد قيل أعلاه أيضا
لديّ كود يعمل سابقًا يلقي هذا الخطأ الآن. لا مشكلة في كلمة المرور. لا حاجة لتحويل الرسالة إلى base64 سواء. اتضح ، أنا بحاجة إلى القيام بما يلي:
رمز العمل
public static void SendEmail(string emailTo, string subject, string body)
{
var client = new SmtpClient("smtp.gmail.com", 587)
{
Credentials = new NetworkCredential("[email protected]", "secretpassword"),
EnableSsl = true
};
client.Send("[email protected]", emailTo, subject, body);
}
اضبط "السماح للتطبيقات الأقل أمانًا" على "تشغيل" (نفس الصفحة ، تحتاج إلى التمرير إلى الأسفل)
ما عليك سوى اتباع الخطوة في البريد الإلكتروني على google وتمكين التطبيقات الأقل أمانًا.
تحتاج إلى تشغيل "السماح للتطبيقات الأقل أمانًا" من هنا https://myaccount.google.com/lesssecureapps
لقد واجهت نفس المشكلة. يحدث ذلك عند تشغيل التحقق بخطوتين (MFA). فقط قم بإيقاف تشغيل التحقق من الخطوة الثانية وينبغي حل مشكلتك.
فيما يلي الكود الخاص بي. لقد كان لدي نفس الخطأ أيضًا ، لكن المشكلة كانت أنني أعطيت كلمة المرور الخاصة بي بشكل خاطئ.
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
mail.From = new MailAddress("[email protected]");
mail.To.Add("[email protected]");
mail.To.Add("[email protected]");
mail.Subject = "Password Recovery ";
mail.Body += " <html>";
mail.Body += "<body>";
mail.Body += "<table>";
mail.Body += "<tr>";
mail.Body += "<td>User Name : </td><td> HAi </td>";
mail.Body += "</tr>";
mail.Body += "<tr>";
mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
mail.Body += "</tr>";
mail.Body += "</table>";
mail.Body += "</body>";
mail.Body += "</html>";
mail.IsBodyHtml = true;
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password");
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
يمكنك إحالته في مدونتي
ما كان يعمل بالنسبة لي هو تنشيط الخيار للتطبيقات الأقل أمانًا (أنا أستخدم VB.NET)
Public Shared Sub enviaDB(ByRef body As String, ByRef file_location As String)
Dim mail As New MailMessage()
Dim SmtpServer As New SmtpClient("smtp.gmail.com")
mail.From = New MailAddress("[email protected]")
mail.[To].Add("[email protected]")
mail.Subject = "subject"
mail.Body = body
Dim attachment As System.Net.Mail.Attachment
attachment = New System.Net.Mail.Attachment(file_location)
mail.Attachments.Add(attachment)
SmtpServer.Port = 587
SmtpServer.Credentials = New System.Net.NetworkCredential("user", "password")
SmtpServer.EnableSsl = True
SmtpServer.Send(mail)
End Sub
لذا ، سجّل الدخول إلى حسابك ، ثم انتقل إلى google.com/settings/security/lesssecureapps
واجهت نفس المشكلة في تطبيق تم نشره على Microsoft Azure.
SmtpException: يتطلب خادم SMTP اتصالًا آمنًا أو لم تتم مصادقة العميل. استجابة الخادم كانت: 5.5.1 المصادقة مطلوبة.
أولاً ، وافقت على جميع الأجهزة غير المعروفة (بعض عناوين بروتوكول الإنترنت التي تنشأ من أيرلندا) على الصفحة التالية (تم تسجيل الدخول كمستخدم gmail): https://security.google.com/settings/u/1/security/secureaccount
لقد استخدمت الإعدادات التالية للعميل:
var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("[email protected]", "my_password");
بدأ العمل فقط بعد أن قمت بتعيين الخاصية التالية على عميل SMTP:
client.TargetName = "STARTTLS/smtp.gmail.com";
جربت جميع الاقتراحات الموجودة هنا ، من تمكين التطبيقات الأقل أمانًا ، إلى تجربة المنفذ 587 ... لم ينجح شيء. أخيرًا ، علقت للتو على السطر UseDefaultCredentials = false
. كل شيء يعمل إذا لم أتطرق لذلك المنطقية.
نوفمبر 2018 ، جرب كل شيء أعلاه دون نجاح.
أدناه هو الحل الذي نجح في النهاية. لسوء الحظ ، لا تستخدم SSL ، لكنها تعمل !!!
var fromAddress = new MailAddress([email protected], "From Name");
var toAddress = new MailAddress("[email protected]", "To Name");
const string subject = "Subject";
const string body = "Body";
var smtp = new SmtpClient
{
Host = "aspmx.l.google.com",
Port = 25,
EnableSsl = false
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
{
smtp.Send(message);
}
تعليق من Tomasz Madeyski هو الذي أصلح مشكلتي ... يقول أنه يوجد خطأ في SetDefaultCredential ، يقول:
"المشكلة هي أنه في أداة ضبط UseDefaultCredentials ، يوجد هذا الكود: this.transport.Credentials = value؟ (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials: (ICredentialsByHost) null ؛ الذي يتخطى بيانات الاعتماد التي تم تعيينها بواسطة محدد بيانات الاعتماد.
إذا وضعت smtpClient.UseDefaultCredentials = false
بعد تعيين بيانات الاعتماد ... فسيتم تعيين هذا السطر لإلغاء بيانات الاعتماد هذه ...
قد تحتاج إلى إنشاء/إنشاء كلمة مرور APP محددة من gmail. ستستخدم التطبيق أو البرنامج النصي كلمة المرور الجديدة هذه بدلاً من كلمة المرور العادية. ستظل كلمة مرورك العادية صالحة لك.
هذا ما فعله لي. ما زلت أستخدم نفس حساب البريد الإلكتروني ولكن كان علي إنشاء كلمة مرور خاصة بالتطبيق الجديد.
https://support.google.com/accounts/answer/185833؟hl=ar
يمكنك القيام بذلك بشكل أساسي هنا: https://security.google.com/settings/security/apppasswords
يجب عليك عدم السماح للتطبيقات الأقل أمانًا بالوصول إلى حساب google الخاص بك .
لكى يفعل:
لقد نظرت حقًا إلى الكثير من الأفكار ، والحل الوحيد هو بهذه الطريقة (يعمل مع مزودي خدمات بريد إلكتروني مختلفين):
try
{
ViewProgressbar("Try to connect mail-server...", progressBar1.Value = 20);
string Host = dsProvider.Rows[y]["POP_hostOut"].ToString();
int port = int.Parse(dsProvider.Rows[y]["POP_portOut"].ToString()); //587
string[] email = von1.Split('@');
string userName = (dsProvider.Rows[y]["login"].ToString() == "email[0]@email[1]")? email[0]+"@"+email[1] : email[0];
string password = layer.getUserPassword(listSender.SelectedValue.ToString());
SmtpClient client = new SmtpClient(Host, port);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
//A idea from MSDN but it not works. You got the "The server response was: 5.5.1 Authentication Required."
//System.Net.NetworkCredential myCreds = new System.Net.NetworkCredential(userName, password, Host);
//System.Net.CredentialCache cache = new System.Net.CredentialCache();
//cache.Add(Host, port, "NTLM", myCreds);
///cache.GetCredential(Host, port, "NTLM"); //NTLM
client.Credentials = new System.Net.NetworkCredential(userName, password);
client.Host = Host;
client.Port = port;
client.EnableSsl = true;
client.Send(message);
ViewProgressbar();
}
catch (SmtpException ex)...
إذا كنت تستخدم جوجل.
1-تسجيل الدخول إلى حسابك
2- تصفح هذا الرابط
3- السماح للتطبيقات الأقل أمانًا: ON
استمتع....
أنا أحد تطبيقات google لمشتركي الأعمال وأقضي الساعات القليلة الماضية فقط في التعامل مع هذا ، حتى بعد امتلاك جميع الإعدادات الصحيحة (smtp ، port ، enableSSL ، إلخ). إليك ما نجح بالنسبة لي ومواقع الويب التي كانت ترمي الخطأ 5.5.1 عند محاولة إرسال بريد إلكتروني:
بعد القيام بذلك ، كانت نماذج البريد الإلكتروني الخاصة بي من الموقع تعمل مرة أخرى. حظا سعيدا!
لا تضع نقطة توقف قبل انتظار smtp.SendMailAsync (البريد) ؛
:)
عندما تنتظر مع نقطة فاصل إعطاء هذا الخطأ عند إزالة نقطة فاصل أنها عملت