Pergunta

Quando tento enviar e-mail usando C # com o servidor SMTP do Gmail, eu recebo este erro ..

"O certificado remoto é inválido de acordo com o procedimento de validação".

SSL está habilitado

Port utilizado é 587

nome do servidor utilizado é "Smtp.gmail.com".

nome de usuário e senha está correta

Outlook Express funciona bem no mesmo PC com as mesmas configurações

O # programa c também funciona bem em outros lugares ... nós receber este erro apenas no local clientes.

gostaria de receber qualquer ajuda ..

Graças

Edit: @ Andomar, Onde posso encontrar os certificados de raiz no cliente? Como faço para corrigir isso?

@ Alnitak, Como posso emitir STARTTLS usando biblioteca System.Net.Mail embora?

@ David, O que eu passar como parâmetro para "(object sender, certificado X509Certificate, cadeia X509Chain, SslPolicyErrors sslPolicyErrors)"

Graças David. Eu adicionei essas linhas. Mas, eu ainda estou confuso sobre o que está acontecendo uma vez que este código não tem qualquer ligação direta com System.Net.Mail tanto quanto a minha understanding.Hope o problema desaparece.

Foi útil?

Solução

Além disso, verifique que os certificados de raiz estão em Trusted loja Autoridade Raiz do Cliente. Se esta é a partir de um serviço, em seguida, adicionar os certificados de raiz para o armazenamento do computador local também pode ajudar. Para obter uma melhor compreensão da razão, então eu encontrei a seguinte política de útil ...

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 adicionar a diretiva, use o seguinte, isso só precisa ser feito uma vez para o domínio de aplicação.

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

Você também pode usar a política para remover o erro por completo, mas seria melhor para resolver o problema do que fazer isso.

Outras dicas

Verifique se os certificados raiz apropriados estão na loja do cliente. E data do sistema do cliente está correta.

Você está usando STARTTLS ou assumindo que a conexão na porta 587 é SSL criptografada desde o início?

servidores do Google sobre smtp.gmail.com exigem STARTTLS.

Você definiu

 client.EnableSsl = true;

Como o Gmail precisa

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top