Gmail Error :The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required
Asked Answered
F

21

309

I am using following code to send email. The Code works correctly in my local Machine. But on Production server i am getting the error message

var fromAddress = new MailAddress("[email protected]");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("[email protected]");

string subject = "subject";
string body = "body";

System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)       
};

using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})

smtp.Send(message);

And on my Gmail A/c I have received the following email after i ran the code from production server

Hi ,

Someone recently used your password to try to sign in to your Google Account [email protected]. This person was using an application such as an email, client or mobile device.

We prevented the sign-in attempt in case this was a hijacker trying to access your account. Please review the details of the sign-in attempt:

Friday, 3 January 2014 13:56:08 o'clock UTC IP Address: xxx.xx.xx.xxx (abcd.net.) Location: Philadelphia PA, Philadelphia, PA, USA

If you do not recognise this sign-in attempt, someone else might be trying to access your account. You should sign in to your account and reset your password immediately.

Reset password

If this was you and you are having trouble accessing your account, complete the troubleshooting steps listed at http://support.google.com/mail?p=client_login

Yours sincerely, The Google Accounts team

Falda answered 3/1, 2014 at 14:40 Comment(5)
Turn off 2-step verification..Excessive
Please, look at #34851984Impassion
Also, make sure the google "Captcha" is disabled - this may be necessary if you are running the script on a remote server (not necessary when running on local machine): accounts.google.com/DisplayUnlockCaptchaDismantle
Encounter the same error for me. After looking couple of post, I tried with changing my existing week password to strong password. Then it worked. After password change, it also asked questions such as are you Ok to access your mail from less secure apps? I said Ok.Assemblyman
Google dropped support for less secure apps. You'll need to generate a password using this method: stackoverflow.com/a/72553362Rudnick
T
223

This generally happens when you try login from different time zone or IP Address Computer. Your production server and the mail id you have used both are in different time zone. Choose either of these two solutions:

1) Log in to production server via remote access, and sign in to gmail once with your credentials. They will ask for the confirmation, confirm it and log out.

Or 2) log in gmail to your local computer, Follow this Link and choose review this activity and take proper actions.

Tittivate answered 3/1, 2014 at 15:6 Comment(8)
A little comment: go to security.google.com/settings/security/activity and here you'l see blocked connection from your code. Allow them and it should help in this case.Photoactinic
This will also help a lot: google.com/settings/security/lesssecureappsTman
Yes, the reason is 2 steps verification switched On for gmail account. Select App/Device and click Generate button support.google.com/accounts/answer/185833Rockaway
Look at #34851984Impassion
Also, make sure the google "Captcha" is disabled - this may be necessary if you are running the script on a remote server (not necessary when running on local machine): accounts.google.com/DisplayUnlockCaptchaDismantle
@Alex that did the trick, I "verified" server by confirming it was my activity now it works!Slovenly
Actually, I also faced the same issue and I had already allowed less secure access. What worked for me is this link. We need to allow access to each app no matter from which app the user is using from. You can get more details from this linkCountenance
Great answer, thank you. Anyway, I've discovered today that the gmail option to allow unsecure apps will be deprecated from 30 May 2022.Trews
E
358

When you try to send mail from code and you find the error "The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required", than the error might occur due to following cases.

case 1: when the password is wrong

case 2: when you try to login from some App

case 3: when you try to login from the domain other than your time zone/domain/computer (This is the case in most of scenarios when sending mail from code)

There is a solution for each

solution for case 1: Enter the correct password.

solution 1 for case 2: go to security settings at the followig link https://www.google.com/settings/security/lesssecureapps and enable less secure apps . So that you will be able to login from all apps.

solution 2 for case 2:(see https://mcmap.net/q/22204/-sending-email-through-gmail-smtp-server-with-c) enable two-factor authentication (aka two-step verification) , and then generate an application-specific password. Use that newly generated password to authenticate via SMTP.

solution 1 for case 3: (This might be helpful) you need to review the activity. but reviewing the activity will not be helpful due to latest security standards the link will not be useful. So try the below case.

solution 2 for case 3: If you have hosted your code somewhere on production server and if you have access to the production server, than take remote desktop connection to the production server and try to login once from the browser of the production server. This will add excpetioon for login to google and you will be allowed to login from code.

But what if you don't have access to the production server. try the solution 3

solution 3 for case 3: You have to enable login from other timezone / ip for your google account.

to do this follow the link https://g.co/allowaccess and allow access by clicking the continue button.

And that's it. Here you go. Now you will be able to login from any of the computer and by any means of app to your google account.

Etsukoetta answered 3/11, 2014 at 7:39 Comment(14)
Solution 2! You little beauty!Incurrent
lesssecureapps link above helped :)Isagogics
Tried Solution 2, Turn On for less secure apps - Still get the same error. Then, I tried Solution 3, Log in at production server - Solved.Reviel
site hosted on azure need to follow solution 3 for case 3: final link which help g.co/allowaccessOnesided
Great job on this! sad but true #2 was the solution for me.Sporophyte
Sadly, none of them worked for me. Code works locally but not when published to my Winhost account. Had never heard of solution 3 and had high hopes. Bummer!Feck
Turns out my password was too weak! They had since changed their password policy, which is why my code broke. Changed it. Bam! All good again.Feck
I am facing case 3. I had already verified solution 1, tried solution 2 based on other SO answers but no success. Only solution three worked for me. Thanks so much.Honeycutt
Solution 2 brotha!Bacchius
shit, why you are so AWESOME like this ??!! thank you so much dude, you really save my time. case 3 worked on me.. bravooo!!Reeher
Solution 2 for case 3 - worked like a charm for me. Thanks.Kinematics
solution 2 for case 2 was the fix for me after I tried everything else.Sclerotomy
I had case 3, from develop server, emails was working well but from production server they doesn't. I spent days to understand the reason why.. you are my hero!Ethridge
Solution 3 works like a charm. Thnaks a lot !Puce
T
223

This generally happens when you try login from different time zone or IP Address Computer. Your production server and the mail id you have used both are in different time zone. Choose either of these two solutions:

1) Log in to production server via remote access, and sign in to gmail once with your credentials. They will ask for the confirmation, confirm it and log out.

Or 2) log in gmail to your local computer, Follow this Link and choose review this activity and take proper actions.

Tittivate answered 3/1, 2014 at 15:6 Comment(8)
A little comment: go to security.google.com/settings/security/activity and here you'l see blocked connection from your code. Allow them and it should help in this case.Photoactinic
This will also help a lot: google.com/settings/security/lesssecureappsTman
Yes, the reason is 2 steps verification switched On for gmail account. Select App/Device and click Generate button support.google.com/accounts/answer/185833Rockaway
Look at #34851984Impassion
Also, make sure the google "Captcha" is disabled - this may be necessary if you are running the script on a remote server (not necessary when running on local machine): accounts.google.com/DisplayUnlockCaptchaDismantle
@Alex that did the trick, I "verified" server by confirming it was my activity now it works!Slovenly
Actually, I also faced the same issue and I had already allowed less secure access. What worked for me is this link. We need to allow access to each app no matter from which app the user is using from. You can get more details from this linkCountenance
Great answer, thank you. Anyway, I've discovered today that the gmail option to allow unsecure apps will be deprecated from 30 May 2022.Trews
K
134

UPDATE 2022

Less Secure Apps method no longer works

You should migrate to GMail SMTP API

Sending email with just a gmail id and password no longer works. You have to setup the api from Google Cloud Console and create OAuth credentials to do so.

Link to Google Cloud Console

Link to Official Guide

Link to An easy guide

enter image description here

ORIGINAL ANSWER

It is a security issue. Gmail by default prevents access for your e-mail account from custom applications. You can set it up to accept the login from your application.

After Logging in to your e-mail, CLICK HERE

This will take you to the following page

Less Secure Apps Page

Karate answered 12/1, 2015 at 10:36 Comment(4)
Also, if you have a custom domain, users first need to be enabled by domain administrator to allow access to less secure apps. If you are a domain admin, go to the following link to enable this admin.google.com/AdminHome#ServiceSettings/…Sequential
Though this was enabled for me, it was not working initially. Later I turned it off and then turned it on. After turning off refresh the page and then turn it on, this worked for me.Epsilon
This no longer works. support.google.com/accounts/answer/…Dulciana
whoever commented that OAuth needs to be setup, I am halfway into setting up google oauth but it doesn't make sense why should my webapp user authorize sending of emails from my app with my account?..#74793864Skidproof
I
29

After spending a couple of hours today trying every solution here, I was still unable to get past this exact error. I have used gmail many times in this way so I knew it was something dumb, but nothing I did fixed the problem. I finally stumbled across the solution in my case so thought I would share.

First, most of the answers above are also required, but in my case, it was a simple matter of ordering of the code while creating the SmtpClient class.

In this first code snippet below, notice where the Credentials = creds line is located. This implementation will generate the error referenced in this question even if you have everything else set up properly.

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    Credentials = creds,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
}

However, if you move the Credentials setter call to the bottom, the email will be sent without error. I made no changes to the surrounding code...ie...the username/password, etc. Clearly, either the EnableSSL, UseDefaultCredentials, or the DeliveryMethod is dependent on the Credentials being set first... I didn't test all to figure out which one it was though.

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
    Credentials = creds
}

Hope this helps save someone else some headaches in the future.

Iseult answered 11/12, 2015 at 20:54 Comment(8)
In my case, I had the same problem as yours, reorderring the code so that Credentials came last worked for me.Cislunar
I can not believe it but it worked! I have enabled 2-step, because did not want to enable less secure flag, but till I put Credential last before Send it did not want to work. Incredible!Fiesta
The issue is that in UseDefaultCredentials setter there is this code: this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null; which overrides credentials set by Credentials setter. For me it looks like SmtpClient's bugFortitude
@TomaszMadeyski this have to be an answer instead of comment! that is my problem... how the hell I can think that if I set credentials on constructor and then assign to a false value again UseDefaultCredentials = false it overrides the credentials... crazy!! but that happens.... thanks youuuuuIthaca
This solution seems to not work anymore!Flodden
I second @SotirisZegiannis ' statement. Does not work for me, either. 2-step authentication enabled.Laval
@MarloC did you get it through? I am banging my head since 2 daysSkidproof
@MarloC - Yes, I got this working, but this thread is 7 years old....google has likely changed a LOT since then.Iseult
K
15

Hi I had the same issue,

what I've done to solve it. is to turn on the less secure app. after connecting to my gmail account. I entered this link: https://www.google.com/settings/security/lesssecureapps

Then I turn on the secure app and, and the it worked. it has been said also above

Kristopher answered 5/3, 2015 at 13:18 Comment(3)
So what is the difference than your answer for above answer ? Same answer is given before you on Jan 12 '15 at 10:36.Infralapsarian
This setting is no longer available in the google account page!Flodden
@SotirisZegiannis this resolved it for me: stackoverflow.com/a/72553362Rudnick
C
14

I have a previously-working code that throws this error now. No issue on password. No need to convert message to base64 either. Turns out, i need to do the following:

  1. Turn off 2-factor authentication
  2. Set "Allow less secure apps" to ON
  3. Login to your gmail account from production server
  4. Go here as well to approve the login activity
  5. Run your app in production server

Working code

    public static void SendEmail(string emailTo, string subject, string body)
    {
        var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential("[email protected]", "secretpassword"),
            EnableSsl = true
        };

        client.Send("[email protected]", emailTo, subject, body);
    }

Turning off 2-factor authentication Turning off 2-factor authentication

Set "Allow less secure apps" to ON (same page, need to scroll to bottom) Allow less secure apps

Capacity answered 9/6, 2018 at 14:8 Comment(1)
According to Google, the "Less Secure Apps" setting is no longer available.Laval
B
12

Gmail/Google has recently removed (from May 2022) Less Secure app access. This is what they says:

To help keep your account secure, from May 30, 2022, Google no longer supports the use of third-party apps or devices which ask you to sign in to your Google Account using only your username and password.

Now any emailer having direct SMTP email sending will throw error "535-5.7.8 Username and Password not accepted". This is because now Google is asking for app specific password and the email account password isn't app password so they show username/password not accepted.

You need to create and use App specific password. An app password works like an alternate password for your account. It can only be used by the applications you share it with, so it’s more secure than sharing your primary password.

To create app specific password:

  1. Enable 2 Factor Authentication.
  2. Go to Account settings of Gmail and select App Passwords.
  3. Name it whatever you want and create the password.
  4. Use this new 16 digit password along with gmail email for SMTP (At the place of password use this 16 digit password)

Enjoy sending emails..!!

enter image description here

enter image description here

enter image description here

Barnacle answered 27/6, 2022 at 10:38 Comment(3)
hey, thanks buddy, I created a App Password for my app, it really works!!Spinks
Glad I was able to helpBarnacle
This was the correct answer as of April 2023. Note however, the "App passwords" was found UNDER the 2-step verification page/section when I did it.Nickeliferous
M
11

Just follow the step in the google email and enable less secure apps.

Millrace answered 29/10, 2014 at 18:0 Comment(0)
G
8

I have faced the same problem. It happens when you turn on 2 Step Verification (MFA). Just Turn off 2 Step Verification and your problem should be solved.

Guberniya answered 31/7, 2014 at 16:2 Comment(1)
I did not have two-step enabled for this account and had this issue.Macron
F
6

So as others have stated correctly, since May 30 google no longer supports the use of third-party apps accessing the account.

enter image description here

What i had to do in order to be able to access the account from my code, was first to enable 2-step verification. enter image description here

Once this is done, i created an App password. enter image description here

I then replaced the generated password, with the one i was using to access my account. In other words one needs to remove the gmail account password(the one we use to login to our gmail) with this new app-password and the functionality was back online!

I hope this helps someone:-)

Flodden answered 16/6, 2022 at 13:18 Comment(1)
Did you replace the newly generated password here? .Credentials = New NetworkCredential(fromEmail, "APP_PWD"), after sending email, my app still throws same smtp errorSkidproof
B
5

Below is my code.I also had the same error but the problem was that i gave my password wrong.The below code will work perfectly..try it

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");             
            mail.From = new MailAddress("[email protected]");
            mail.To.Add("[email protected]");
            mail.To.Add("[email protected]");
            mail.Subject = "Password Recovery ";
            mail.Body += " <html>";
            mail.Body += "<body>";
            mail.Body += "<table>";
            mail.Body += "<tr>";
            mail.Body += "<td>User Name : </td><td> HAi </td>";
            mail.Body += "</tr>";

            mail.Body += "<tr>";
            mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
            mail.Body += "</tr>";
            mail.Body += "</table>";
            mail.Body += "</body>";
            mail.Body += "</html>";
            mail.IsBodyHtml = true;
            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password");
            SmtpServer.EnableSsl = true;
            SmtpServer.Send(mail);

You can refer it in my blog

Barbiturism answered 13/5, 2014 at 2:12 Comment(2)
i am using the same code which is working in my local machine but its not working on server. Getting error The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required..Drawl
i contacted my hosting provider they said : We could see that you have configure third part SMTP (smtp.gmail.com) which will not support in our shared server environment. Due to excessive abuse of mail function or spamming problem, mail function is not supported. You can send email using PHPMailer, Which is very popular and often used. but my site is build in mvc c#, so how can i use phpmailer ?Drawl
V
4

I had the same problem for an application deployed to Microsoft Azure.

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

First I approved all unknown devices (some ip-addresses originating from Ireland) on the following page (signed in as the gmail user): https://security.google.com/settings/u/1/security/secureaccount

I used the following settings for the client:

var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("[email protected]", "my_password"); 

It started working only after I set the following property on the smtp-client:

client.TargetName = "STARTTLS/smtp.gmail.com";
Varicotomy answered 11/9, 2015 at 12:38 Comment(0)
D
4

After 30th may 2022 Gmail changed it's policy for external apps which using google SMTP for send e-mail For details. Solition is login google account that you want to send e-mail, enable google two step verification and create a password for external app. For details

Duley answered 2/6, 2022 at 18:6 Comment(0)
B
3

What worked for me was to activate the option for less secure apps (I am using VB.NET)

Public Shared Sub enviaDB(ByRef body As String, ByRef file_location As String)
        Dim mail As New MailMessage()
        Dim SmtpServer As New SmtpClient("smtp.gmail.com")
        mail.From = New MailAddress("[email protected]")
        mail.[To].Add("[email protected]")
        mail.Subject = "subject"
        mail.Body = body
        Dim attachment As System.Net.Mail.Attachment
        attachment = New System.Net.Mail.Attachment(file_location)
        mail.Attachments.Add(attachment)
        SmtpServer.Port = 587
        SmtpServer.Credentials = New System.Net.NetworkCredential("user", "password")
        SmtpServer.EnableSsl = True
        SmtpServer.Send(mail)
    End Sub

So log in to your account and then go to google.com/settings/security/lesssecureapps

Brackish answered 2/12, 2015 at 21:39 Comment(0)
I
3

A comment from Tomasz Madeyski is what fixed my problem... he tells that exists a bug on SetDefaultCredential, him says:

"The issue is that in UseDefaultCredentials setter there is this code: this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null; which overrides credentials set by Credentials setter. For me it looks like SmtpClient's bug"

if you put smtpClient.UseDefaultCredentials = false after set credentials... this line set to null those credentials...

Ithaca answered 23/2, 2018 at 10:21 Comment(0)
F
3

NOVEMBER 2018, have tried everything above with no success.

Below is the solution that worked finally. Unfortunately it's not using SSL, but it works!!!

var fromAddress = new MailAddress([email protected], "From Name");
var toAddress = new MailAddress("[email protected]", "To Name");

const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
{
    Host = "aspmx.l.google.com",
    Port = 25,
    EnableSsl = false
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}
Fe answered 29/11, 2018 at 16:52 Comment(0)
P
2

I tried all of the suggestions found here, from enabling less secure apps, to trying port 587... nothing worked. Finally I just commented out the line UseDefaultCredentials = false. Everything worked if I didn't touch that boolean.

Platinumblond answered 31/5, 2017 at 18:6 Comment(0)
I
1

You might need to create/generate a specific APP password from gmail. you app or script will then use this new password instead of your regular password. Your regular password will still work fine for you.

That is what did it for me. I still used the same email account but had to generate a new app specific password.

https://support.google.com/accounts/answer/185833?hl=en

Screen shot

Basically you can do it here: https://security.google.com/settings/security/apppasswords

Island answered 20/1, 2016 at 20:33 Comment(0)
L
0

I have really looked at a lot of ideas, the only solution was this way (works with different email Providers):

            try
        {
            ViewProgressbar("Try to connect mail-server...", progressBar1.Value = 20);
            string host = dsProvider.Rows[y]["POP_hostOut"].ToString();
            int port = int.Parse(dsProvider.Rows[y]["POP_portOut"].ToString());  //587
            string[] email = von1.Split('@');
            string userName = (dsProvider.Rows[y]["login"].ToString() == "email[0]@email[1]")? email[0]+"@"+email[1] : email[0];
            string password = layer.getUserPassword(listSender.SelectedValue.ToString());
            SmtpClient client = new SmtpClient(host, port);
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            //A idea from MSDN but it not works. You got "The server response was: 5.5.1 Authentication Required."
            //System.Net.NetworkCredential myCreds = new System.Net.NetworkCredential(userName, password, host);
            //System.Net.CredentialCache cache = new System.Net.CredentialCache();
            //cache.Add(host, port, "NTLM", myCreds);
            ///cache.GetCredential(host, port, "NTLM");   //NTLM
            client.Credentials = new System.Net.NetworkCredential(userName, password);
            client.Host = host;
            client.Port = port;
            client.EnableSsl = true;
            client.Send(message);
            ViewProgressbar();
        }
        catch (SmtpException ex)...
Lanettelaney answered 9/5, 2014 at 11:21 Comment(0)
P
0

dont put break-point before await smtp.SendMailAsync(mail);

:)

when it waits with a break point giving this error when i remove break point it has worked

Perished answered 6/12, 2018 at 21:14 Comment(0)
C
-6

try changing the host, this is the new one, I got this configuring mozilla thunderbird

Host = "smtp.googlemail.com"

that work for me

Chericheria answered 15/12, 2014 at 16:40 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.