Question

Lorsque j'essaie d'envoyer un courrier électronique en C # avec le serveur smtp de gmail, j'obtiens cette erreur.

"Le certificat distant n'est pas valide conformément à la procédure de validation".

.

SSL est activé

Le port utilisé est 587

le nom du serveur utilisé est "Smtp.gmail.com".

le nom d'utilisateur et le mot de passe sont corrects

Outlook Express fonctionne correctement sur le même ordinateur avec les mêmes paramètres

Le programme c # fonctionne également bien dans d'autres endroits ... nous obtenons cette erreur uniquement dans l'emplacement des clients.

apprécierait toute aide ..

Merci

Edit: @ Andomar, où puis-je trouver les certificats racine dans le client? Comment résoudre ce problème?

@ Alnitak, comment puis-je utiliser des starttls avec la bibliothèque System.Net.Mail?

@ David, que dois-je passer en tant que paramètre pour "(expéditeur de l'objet, certificat X509Certificate, chaîne X509Chain, SslPolicyErrors sslPolicyErrors)"

Merci David. J'ai ajouté ces lignes. Mais je ne comprends toujours pas ce qui se passe, car ce code n’a aucun lien direct avec System.Net.Mail pour autant que je sache. Le problème disparaîtra.

Était-ce utile?

La solution

Vérifiez également que les certificats racine se trouvent dans le magasin d'autorités racines de confiance du client. S'il s'agit d'un service, l'ajout des certificats racine au magasin de l'ordinateur local peut également aider. Pour mieux comprendre la raison, j’ai trouvé la politique suivante utile ...

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;
}

Pour ajouter la stratégie dans, utilisez ce qui suit, cela ne doit être fait qu'une fois pour le domaine d'application.

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

Vous pouvez également utiliser la stratégie pour supprimer complètement l'erreur, mais il serait préférable de résoudre le problème que de le faire.

Autres conseils

Vérifiez si les certificats racine appropriés se trouvent dans le magasin du client. Et la date système du client est correcte.

Utilisez-vous STARTTLS ou supposez-vous que la connexion sur le port 587 est cryptée SSL dès le départ?

Les serveurs de Google sur smtp.gmail.com nécessitent STARTTLS.

Avez-vous défini

 client.EnableSsl = true;

parce que gmail en a besoin

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top