مشكلة إرسال البريد الإلكتروني باستخدام C#

StackOverflow https://stackoverflow.com/questions/801243

  •  03-07-2019
  •  | 
  •  

سؤال

عند محاولة إرسال البريد الإلكتروني باستخدام C# مع gmail smtp server,أحصل على هذا الخطأ..

"بعد شهادة غير صالح وفقا التحقق من صحة الإجراء".

يتم تمكين SSL

المنفذ المستخدم هو 587

خادم اسم المستخدم هو "Smtp.gmail.com".

اسم المستخدم وكلمة المرور غير صحيحة

outlook express يعمل بشكل جيد على نفس جهاز الكمبيوتر مع نفس الإعدادات

C# البرنامج أيضا يعمل بشكل جيد في أماكن أخرى...نحصل على هذا الخطأ فقط في عملاء المكان.

سوف نقدر أي مساعدة..

شكرا

تحرير:@Andomar أين يمكنني العثور على الشهادات الجذر في العميل ؟ كيف يمكنني إصلاح هذا ؟

@Alnitak,كيف يمكنني المسألة starttls باستخدام النظام.صافي.البريد المكتبة ؟

@ديفيد ، ما يمكنني تمرير المعلمة "(المرسل كائن ، X509Certificate شهادة X509Chain سلسلة SslPolicyErrors sslPolicyErrors)"

شكرا ديفيد.لقد أضفت تلك الخطوط.ولكن أنا لا تزال مشوشة حول ما يجري منذ هذا الرمز ليس لديها أي اتصال مباشر مع النظام.صافي.البريد بقدر فهمي.أمل المشكلة يذهب بعيدا.

هل كانت مفيدة؟

المحلول

أيضا التحقق من أن الشهادات الجذر في العميل الجذر الموثوق بها سلطة المخزن.إذا كان هذا هو من الخدمة ثم إضافة شهادات جذر إلى مخزن الجهاز المحلي قد يساعد أيضا.للحصول على فهم أفضل من السبب ثم وجدت السياسة التالية مفيدة...

public bool ValidateServerCertificate( object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
// No errors so continue…
if (sslPolicyErrors == SslPolicyErrors.None)
       return true;

// I’m just logging it to a label on the page, 
//  this should be stored or logged to the event log at this time. 
lblStuff.Text += string.Format("Certificate error: {0} <BR/>", sslPolicyErrors);

// If the error is a Certificate Chain error then the problem is
// with the certificate chain so we need to investigate the chain 
// status for further info.  Further debug capturing could be done if
// required using the other attributes of the chain.
      if (sslPolicyErrors == SslPolicyErrors.RemoteCertificateChainErrors)
      {
       foreach (X509ChainStatus status in chain.ChainStatus)
       {
             lblStuff.Text += string.Format("Chain error: {0}: {1} <BR/>", status.Status, status.StatusInformation);
  }
}

// Do not allow this client to communicate 
//with unauthenticated servers.
      return false;
}

لإضافة السياسة ، ، وهذا يحتاج فقط إلى أن يتم مرة واحدة عن مجال التطبيق.

using System.Net;
...
ServicePointManager.ServerCertificateValidationCallback =
new Security.RemoteCertificateValidationCallback(ValidateServerCertificate);

يمكنك أيضا استخدام سياسة إزالة خطأ تماما ولكن سيكون من الأفضل حل المشكلة من فعل ذلك.

نصائح أخرى

تحقق مما إذا كان الجذر الصحيح شهادات العميل المخزن.و العميل هو تاريخ النظام هو الصحيح.

هل تستخدم STARTTLS أو افتراض أن اتصال على المنفذ 587 هو SSL مشفرة من البداية ؟

خوادم Google على smtp.gmail.com تتطلب STARTTLS.

هل تعيين

 client.EnableSsl = true;

لأن gmail يحتاج إليها

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top