Pregunta

Cuando intento enviar un correo electrónico utilizando C # con el servidor smtp de gmail, recibo este error ...

" El certificado remoto no es válido según el procedimiento de validación " ;.

SSL está habilitado

El puerto utilizado es 587

el nombre del servidor utilizado es " Smtp.gmail.com " ;.

el nombre de usuario y la contraseña son correctos

Outlook Express funciona bien en la misma PC con la misma configuración

El programa c # también funciona bien en otros lugares ... solo obtenemos este error en el lugar del cliente.

Agradecería cualquier ayuda ..

Gracias

Editar: @ Andomar, ¿Dónde encuentro los certificados raíz en el cliente? ¿Cómo soluciono esto?

@ Alnitak, ¿cómo puedo emitir starttls usando la biblioteca System.Net.Mail?

@ David, ¿Qué paso como parámetro para " (transmisor de objeto, certificado de certificado X509, cadena de Cadena de X509, SslPolicyErrors sslPolicyErrors) "

Gracias David. He añadido esas líneas. Pero, todavía estoy confundido acerca de lo que está pasando ya que este código no tiene ninguna conexión directa con System.Net.Mail por lo que entiendo. Espero que el problema desaparezca.

¿Fue útil?

Solución

También verifique que los certificados raíz se encuentren en el almacén de la Autoridad Raíz Confiable del Cliente. Si esto proviene de un servicio, también puede ser útil agregar los certificados raíz al almacén de la Máquina local. Para comprender mejor el motivo, he encontrado útil la siguiente política ...

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

Para agregar la política, use lo siguiente, esto solo debe hacerse una vez para el dominio de la aplicación.

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

También puedes usar la política para eliminar el error por completo, pero sería mejor solucionar el problema que hacerlo.

Otros consejos

Verifique si los certificados raíz correctos están en la tienda del cliente. Y la fecha del sistema del cliente es correcta.

¿Está utilizando STARTTLS o asumiendo que la conexión en el puerto 587 está cifrada con SSL desde el principio?

Los servidores de Google en smtp.gmail.com requieren STARTTLS.

Has configurado

 client.EnableSsl = true;

porque gmail lo necesita

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top