Can't auth to Gmail smtp via MailMessage & smtpClient

I cannot figure out for the life of my why this isn't working

SmtpClient smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    UseDefaultCredentials = false,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere"),
    EnableSsl = true,
    Timeout = 10000
};


smtp.Send(mail);

I get:

The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required.

I just specified EnableSsl to true so that shouldn't be the issue in terms of secure connection.

I'm running this from localhost. And yes, my username and password I'm entering to auth (my gmail account credentials) is 100% right.

Answers


I know this is an old topic, BUT... Google has changed something on their security settings.

Was struggling with all the answers until I checked my email with a mail from Google stating that "we've recently blocked a sign-in attempt on your Google account".

That led me to this page: Google Account Security

Under the "Access for less secure apps" section, you can enable access to your account from other devices/applications... like your C# application.

Note, there is no longer an "application specific" section.

Hope this helps someone... I just lost 30 minutes of my life...


If login info is 100% right, you need to set UseDefaultCredentials = false first and then set the credentials you want to use Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere").

If you set the credentials first, when you set UseDefaultCredentials = false this will make the Credentials property to null.

This is wired, but it happened to me.

Debug your code and check if the Credentials property is null before you call smtp.Send(message);. If so, then try inverting the order. It seems you have it in the right order, but if it's null, don't use the inline initialization.

Hope it helps.

EDIT: If you are using two-step verification, be sure you are using an App Specific password


It looks like Gmail requires Application-specific password(not your main password).

Please, look into this: http://support.google.com/mail/bin/answer.py?hl=en&answer=1173270

I had the same problem recently.


I had this problem before and fixed it by following these steps:

  1. Go to "My Account" settings.
  2. Click "Sign-in & Security" category.
  3. Scroll down to "Connected apps & sites" section.
  4. turn off the "Allow less secure apps" option.

I just turned this option off and my code ran successfully.


This worked just fine for me

SmtpClient smtp = new SmtpClient
    {
        Host = "smtp.gmail.com",
        Port = 587,
        UseDefaultCredentials = false,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        Credentials = new NetworkCredential("myid@gmail.com", "mypassword"),
        EnableSsl = true,
        Timeout = 10000
    };

    MailMessage message = new MailMessage();
    message.Body = "hello there";
    message.Subject = "hi!!";
    message.To.Add("myid@gmail.com");
    message.From = new MailAddress("myid@gmail.com");
    smtp.Send(message);

For me the solution required 2 "steps":

  • set UseDefaultCredentials = false first, then set the credentials I want to use Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere"). Setting the credentials first, when I set UseDefaultCredentials = false will make the Credentials property null.
  • Allow less secure apps on my Google profile.

Have a callback as follows. Tell System.Net to ignore the error!

Add this before call to Send()

ServicePointManager.ServerCertificateValidationCallback = 
    delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { return true; };

smtp.Send(mail);

<mailSettings>
            <smtp from="youremail@gmail.com">
                <network host="smtp.gmail.com" password="yourpassword" port="587" userName="username"/>
            </smtp>
</mailSettings>

Edit: try adding this line smtp.Credentials = Credentials after this

Credentials = new NetworkCredential("myemail@gmail.com", "myGmailPasswordHere"),


Had the same issue accessing smtp.gmail.com from an ASP.NET application running on Amazon AWS hosting. It turned out that my configuration was right - it was also working fine from another computer - but gmail would deny my login attempt, because I try logging in from an unusual location. I logged on to gmail over the web interface (www.gmail.com), and had to answer a captcha. After that it worked.


My problem was that the domain-owner for our gmail-account had disabled both "Access for less secure apps" and two step authentication. There was no way to enable it, I couldn't even see the setting. So I tested with my personal account instead, and it worked fine.


Very simple just follow this for C# WPF Application:

       private void SendByGmail(string subject, string body, string recepientEmail, string MailMsgFrom, string MailMsgPass)
        {
            using (MailMessage mailMessage = new MailMessage())
            {
                mailMessage.From = new MailAddress(MailMsgFrom);
                mailMessage.Subject = subject;
                mailMessage.Body = body;
                mailMessage.IsBodyHtml = true;
                mailMessage.To.Add(new MailAddress(recepientEmail));
                mailMessage.Priority = System.Net.Mail.MailPriority.High;
                SmtpClient smtp = new SmtpClient();
                smtp.Host = "smtp.gmail.com";
                smtp.EnableSsl = true;
                smtp.Timeout = 200000;
                System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
                NetworkCred.UserName = MailMsgFrom;
                NetworkCred.Password = MailMsgPass;
                smtp.UseDefaultCredentials = true;
                smtp.Credentials = NetworkCred;
                smtp.Port = 587;
                smtp.Send(mailMessage);

            }
        }

After that you should get like this Error

smtpException   {"The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at"}   System.Net.Mail.SmtpException

To Solve this problem, at first login your email account to your google account in web browser. Then just follow this link Google Account Activity. Then you'll get recent Devices & activity by your account. If show block your current activity from your current device. Just Unblock this. Then try again to send email. Thanks


Need Your Help

read-only properties in PHP?

php oop readonly

Is there a way to make a read-only property of an object in PHP? I have an object with a couple arrays in it. I want to access them as I normally would an array

Causing OutOfMemoryError in Frame by Frame Animation in Android

android animation memory-leaks out-of-memory

I am having lots of images as frames in my resources/drawable folder (let say approx 200). And using this images i want run a animation. The longest animation is of 80Frames. I am successfully able...