दिलचस्प पोस्ट
javascript से जावा सर्वलेट को बुला रहा है जावा का उपयोग करते हुए DOM ट्री पर HTML फ़ाइल पढ़ना कैसे datetime को यूनिक्स टाइमस्टैम्प से कन्वर्ट करने के लिए? एंड्रॉइड एसडीके टूल्स संशोधन 12 में प्रॉगलिया => डेल्विक प्रारूप में त्रुटि रूपांतरण के साथ समस्या है त्रुटि 1 के साथ विफल बूटस्ट्रैप में हैमबर्गर मेनू को कैसे जोड़ें सफ़ारी और क्रोम में jQuery का काम नहीं कर रहा फोकस पर टेक्स्ट का चयन करना C ++ में एक वैश्विक चर को कैसे घोषित करें क्या const_cast सुरक्षित है? आर: संदर्भ से पास करें Google फ़ायरस्टोर – एक राउंड ट्रिप में एकाधिक आईडी के द्वारा दस्तावेज़ कैसे प्राप्त करें? एनएटी कोर के साथ चित्रों को छेड़छाड़ करना एक यूडीएफ इतनी धीमी क्यों नहीं है? जावा user.home को% userprofile% पर सेट किया जा रहा है और हल नहीं किया जा रहा है किसी मंडली के आसपास कुछ तत्व गतिशील रूप से व्यवस्थित करें डीबग मोड में दो बार आरंभ करने से फ्लास्क को कैसे रोकें?

जीमेल के साथ SmtpClient

मैं एक स्कूल परियोजना के लिए एक मेल क्लाइंट विकसित कर रहा हूँ मैंने सी # में SmtpClient का उपयोग करके ई-मेल भेजने में कामयाब रहा है। यह किसी भी सर्वर के साथ पूरी तरह से काम करता है लेकिन यह Gmail के साथ काम नहीं करता है मेरा मानना ​​है कि Google की वजह से टीएलएस का उपयोग करना मैंने EnableSsl को SmtpClient पर true करने की कोशिश की है लेकिन यह कोई फर्क नहीं पड़ता है

यह कोड मैं SmtpClient बनाने और एक ई-मेल भेजने के लिए उपयोग कर रहा हूँ।

 this.client = new SmtpClient("smtp.gmail.com", 587); this.client.EnableSsl = true; this.client.UseDefaultCredentials = false; this.client.Credentials = new NetworkCredential("username", "password"); try { // Create instance of message MailMessage message = new MailMessage(); // Add receiver message.To.Add("myemail@mydomain.com"); // Set sender // In this case the same as the username message.From = new MailAddress("username@gmail.com"); // Set subject message.Subject = "Test"; // Set body of message message.Body = "En test besked"; // Send the message this.client.Send(message); // Clean up message = null; } catch (Exception e) { Console.WriteLine("Could not send e-mail. Exception caught: " + e); } 

यह एक त्रुटि है जब मैं ई-मेल भेजने का प्रयास करता हूं

 Could not send e-mail. Exception caught: System.Net.Mail.SmtpException: Message could not be sent. ---> System.IO.IOException: The authentication or decryption has failed. ---> System.InvalidOperationException: SSL authentication error: RemoteCertificateNotAvailable, RemoteCertificateChainErrors at System.Net.Mail.SmtpClient.<callback>m__4 (System.Object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, SslPolicyErrors sslPolicyErrors) [0x00000] in <filename unknown>:0 at System.Net.Security.SslStream+<BeginAuthenticateAsClient>c__AnonStorey7.<>m__A (System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Int32[] certErrors) [0x00000] in <filename unknown>:0 at Mono.Security.Protocol.Tls.SslClientStream.OnRemoteCertificateValidation (System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Int32[] errors) [0x00000] in <filename unknown>:0 at Mono.Security.Protocol.Tls.SslStreamBase.RaiseRemoteCertificateValidation (System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Int32[] errors) [0x00000] in <filename unknown>:0 at Mono.Security.Protocol.Tls.SslClientStream.RaiseServerCertificateValidation (System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Int32[] certificateErrors) [0x00000] in <filename unknown>:0 at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.validateCertificates (Mono.Security.X509.X509CertificateCollection certificates) [0x00000] in <filename unknown>:0 at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.ProcessAsTls1 () [0x00000] in <filename unknown>:0 at Mono.Security.Protocol.Tls.Handshake.HandshakeMessage.Process () [0x00000] in <filename unknown>:0 at (wrapper remoting-invoke-with-check) Mono.Security.Protocol.Tls.Handshake.HandshakeMessage:Process () at Mono.Security.Protocol.Tls.ClientRecordProtocol.ProcessHandshakeMessage (Mono.Security.Protocol.Tls.TlsStream handMsg) [0x00000] in <filename unknown>:0 at Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 --- End of inner exception stack trace --- at Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 --- End of inner exception stack trace --- at System.Net.Mail.SmtpClient.Send (System.Net.Mail.MailMessage message) [0x00000] in <filename unknown>:0 at P2Mailclient.SMTPClient.send (P2Mailclient.Email email) [0x00089] in /path/to/my/project/SMTPClient.cs:57 

क्या किसी का विचार है कि मुझे यह त्रुटि क्यों मिल रही है?

Solutions Collecting From Web of "जीमेल के साथ SmtpClient"

इसे चलाने का प्रयास करें:

 mozroots --import --ask-remove 

आपके सिस्टम में (सिर्फ बाश में या मोनो कमांड प्रॉम्प्ट से अगर यह विंडोज पर है)। और फिर कोड फिर से चलाएं।

संपादित करें:

मैं भूल गया तुम भी दौड़ना चाहिए

 certmgr -ssl smtps://smtp.gmail.com:465 

(और प्रश्नों पर हां उत्तर दें) यह मेरे लिए मोनो 2.10.8, लिनक्स (आपके उदाहरण के साथ) के लिए काम करता है।

जीमेल के एसएमटीपी सर्वर के लिए आपको एक मान्य जीमेल ईमेल / पासवर्ड संयोजन के साथ आपके अनुरोध को प्रमाणित करने की आवश्यकता है। आपको एसएसएल सक्षम की ज़रूरत है वास्तव में आपके सभी चर के डंप को देखने में सक्षम होने के बिना मैं सबसे अच्छा अनुमान लगा सकता हूं कि आपके क्रेडेंशियल्स अमान्य हैं, यह सुनिश्चित करें कि आप एक वैध GMAIL ईमेल / पासवर्ड संयोजन का उपयोग कर रहे हैं

आप यहां एक उदाहरण के लिए काम करना सीख सकते हैं।

संपादित करें: ठीक है, यहाँ कुछ लिखा है और मैंने अभी परीक्षण किया है और मेरे लिए यह ठीक काम किया है:

 public static bool SendGmail(string subject, string content, string[] recipients, string from) { if (recipients == null || recipients.Length == 0) throw new ArgumentException("recipients"); var gmailClient = new System.Net.Mail.SmtpClient { Host = "smtp.gmail.com", Port = 587, EnableSsl = true, UseDefaultCredentials = false, Credentials = new System.Net.NetworkCredential("******", "*****") }; using (var msg = new System.Net.Mail.MailMessage(from, recipients[0], subject, content)) { for (int i = 1; i < recipients.Length; i++) msg.To.Add(recipients[i]); try { gmailClient.Send(msg); return true; } catch (Exception) { // TODO: Handle the exception return false; } } } 

यदि आपको किसी भी अधिक जानकारी की आवश्यकता है तो यहां एक समान एसईओ लेख है

मुझे लगता है, आपको SSL प्रमाणपत्र स्थापित करने के लिए उपयोग किए जाने वाले सर्वर प्रमाणपत्र को मान्य करना होगा …..

सर्वर प्रमाण पत्र मान्य के साथ मेल भेजने के लिए निम्नलिखित कोड का उपयोग करें …..

  this.client = new SmtpClient(_account.SmtpHost, _account.SmtpPort); this.client.EnableSsl = _account.SmtpUseSSL; this.client.Credentials = new NetworkCredential(_account.Username, _account.Password); try { // Create instance of message MailMessage message = new MailMessage(); // Add receivers for (int i = 0; i < email.Receivers.Count; i++) message.To.Add(email.Receivers[i]); // Set sender message.From = new MailAddress(email.Sender); // Set subject message.Subject = email.Subject; // Send e-mail in HTML message.IsBodyHtml = email.IsBodyHtml; // Set body of message message.Body = email.Message; //validate the certificate ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; }; // Send the message this.client.Send(message); // Clean up message = null; } catch (Exception e) { Console.WriteLine("Could not send e-mail. Exception caught: " + e); } 

Import System.Security.Cryptography.X509Certificates का उपयोग करने के लिए नामस्थान

यह कोड मेरे लिए ठीक काम करता है, इसे LinqPad में चिपकाने का प्रयास करें, मेल पतों और पासवर्ड को संपादित करें और हमें बताएं कि आप क्या देखते हैं:

 var client = new System.Net.Mail.SmtpClient("smtp.gmail.com", 587); client.EnableSsl = true; client.UseDefaultCredentials = false; client.Credentials = new System.Net.NetworkCredential("me@gmail.com", "xxxxxxx"); try { // Create instance of message System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(); // Add receiver message.To.Add("me@gmail.com"); // Set sender // In this case the same as the username message.From = new System.Net.Mail.MailAddress("me@gmail.com"); // Set subject message.Subject = "Test"; // Set body of message message.Body = "En test besked"; // Send the message client.Send(message); // Clean up message = null; } catch (Exception e) { Console.WriteLine("Could not send e-mail. Exception caught: " + e); } 

आपको अपने जीमेल खाते में 2-चरणीय सत्यापन सक्षम करने और ऐप पासवर्ड बनाने की ज़रूरत है ( https://support.google.com/accounts/answer/185833?hl=en )। एक बार जब आप अपना पासवर्ड नए एप पासवर्ड से बदल देते हैं, तो उसे काम करना चाहिए।

 Credentials = new System.Net.NetworkCredential("your email address", "your app password"); 

मैं 6 महीनों के लिए काम करने के बाद मई 2013 में जीमेल के साथ यह शुरू करना शुरू कर दिया। मोनो प्रोजेक्ट का प्रयोग विश्वसनीय जड़ें का सम्मानजनक रूप से दस्तावेज प्रदान करते हैं, जो कि काम पर मार्गदर्शन प्रदान करते हैं। मैंने विकल्प # 1 चुना है:

 ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 

यह मेरी सेवा के लिए ई-मेल के लिए बहुत विघटनकारी है बिना चेतावनी के काम करना बंद कर रहा है।

26 अगस्त 2016 को अपडेट करें: उपयोगकर्ता चिको ने ServerCertificateValidationCallback कॉलबैक का पूरा पूरा कार्यान्वयन सुझाया। मैंने परीक्षण नहीं किया है

 ServicePointManager.ServerCertificateValidationCallback = MyRemoteCertificateValidationCallback; bool MyRemoteCertificateValidationCallback(System.Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { bool isOk = true; // If there are errors in the certificate chain, look at each error to determine the cause. if (sslPolicyErrors != SslPolicyErrors.None) { for (int i=0; i<chain.ChainStatus.Length; i++) { if (chain.ChainStatus [i].Status != X509ChainStatusFlags.RevocationStatusUnknown) { chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; chain.ChainPolicy.RevocationMode = X509RevocationMode.Online; chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan (0, 1, 0); chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags; bool chainIsValid = chain.Build ((X509Certificate2)certificate); if (!chainIsValid) { isOk = false; } } } } return isOk; }