Asp.Net Core MailKit: The remote certificate is invalid according to the validation proceedure

Carlos Jimenez Bermudez picture Carlos Jimenez Bermudez · Apr 23, 2017 · Viewed 7.6k times · Source

I have a question regarding email sending on asp.net core.

So I have this code:

private void SendEmailLocalSMTP(string email, string subject, string message)
{
        MimeMessage mailMsg = new MimeMessage();

        //TESTING ENVIRONMENT ONLY!!!
        mailMsg.To.Add(new MailboxAddress("[email protected]", "[email protected]"));

        // From
        mailMsg.From.Add(new MailboxAddress("[email protected]", "Facturacion"));

        // Subject and multipart/alternative Body
        mailMsg.Subject = subject;
        string html = message;

        System.Net.NetworkCredential credentials = new System.Net.NetworkCredential("[email protected]", "myPassword");

        // Init SmtpClient and send
        using (var client = new SmtpClient())
        {
            client.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);
            client.AuthenticationMechanisms.Remove("XOAUTH2");
            client.Authenticate(credentials);
            client.Send(mailMsg);
            client.Disconnect(true);
        }
    }

From what I have found in other posts somewhat related, this should be enough to send it using MailKit, however it's not working properly. I am getting the following exception and I don't know how to proceed from here.

This is the exception:

enter image description here

I've seen this question, but I haven't made much sense from it: How to send email by using MailKit?

Any help is highly appreciated, thanks.

Answer

jstedfast picture jstedfast · Apr 23, 2017

The problem you are hitting is that your system does not trust the GMail SSL certificate.

Most likely the reason for this is because the Google Root CA certificate has not been imported into your Root certificate store.

There are two ways around this:

  1. Import Google's Root CA certificate into your system (how to do this varies depending on Windows, Linux, MacOS)
  2. Override the certificate validation by setting your own certificate validation callback method on client.ServerCertificateValidationCallback

For more information, see the FAQ: https://github.com/jstedfast/MailKit/blob/master/FAQ.md#InvalidSslCertificate