title: SmtpClient with Gmail
body: <p>I'm developing a mail client for a school project. I have managed to send e-mails using the <code>SmtpClient</code> in C#. This works perfectly with any server but it doesn't work with Gmail. I believe it's because of Google using TLS. I have tried setting <code>EnableSsl</code> to <code>true</code> on the <code>SmtpClient</code> but this doesn't make a difference.</p>
  
  <p>This is the code I am using to create the <code>SmtpClient</code> and send an e-mail.</p>
  
  <pre><code>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);
  }
  </code></pre>
  
  <p>This is the error I am getting when I try to send an e-mail.</p>
  
  <pre><code>Could not send e-mail. Exception caught: System.Net.Mail.SmtpException: Message could not be sent. ---&gt; System.IO.IOException: The authentication or decryption has failed. ---&gt; System.InvalidOperationException: SSL authentication error: RemoteCertificateNotAvailable, RemoteCertificateChainErrors
    at System.Net.Mail.SmtpClient.&lt;callback&gt;m__4 (System.Object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, SslPolicyErrors sslPolicyErrors) [0x00000] in &lt;filename unknown&gt;:0 
    at System.Net.Security.SslStream+&lt;BeginAuthenticateAsClient&gt;c__AnonStorey7.&lt;&gt;m__A (System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Int32[] certErrors) [0x00000] in &lt;filename unknown&gt;:0 
    at Mono.Security.Protocol.Tls.SslClientStream.OnRemoteCertificateValidation (System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Int32[] errors) [0x00000] in &lt;filename unknown&gt;:0 
    at Mono.Security.Protocol.Tls.SslStreamBase.RaiseRemoteCertificateValidation (System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Int32[] errors) [0x00000] in &lt;filename unknown&gt;:0 
    at Mono.Security.Protocol.Tls.SslClientStream.RaiseServerCertificateValidation (System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Int32[] certificateErrors) [0x00000] in &lt;filename unknown&gt;:0 
    at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.validateCertificates (Mono.Security.X509.X509CertificateCollection certificates) [0x00000] in &lt;filename unknown&gt;:0 
    at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.ProcessAsTls1 () [0x00000] in &lt;filename unknown&gt;:0 
    at Mono.Security.Protocol.Tls.Handshake.HandshakeMessage.Process () [0x00000] in &lt;filename unknown&gt;: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 &lt;filename unknown&gt;:0 
    at Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback (IAsyncResult asyncResult) [0x00000] in &lt;filename unknown&gt;:0 
    --- End of inner exception stack trace ---
    at Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback (IAsyncResult asyncResult) [0x00000] in &lt;filename unknown&gt;:0 
    --- End of inner exception stack trace ---
    at System.Net.Mail.SmtpClient.Send (System.Net.Mail.MailMessage message) [0x00000] in &lt;filename unknown&gt;:0 
    at P2Mailclient.SMTPClient.send (P2Mailclient.Email email) [0x00089] in /path/to/my/project/SMTPClient.cs:57 
  </code></pre>
  
  <p>Does anyone have an idea why I might be getting this error?</p>