smtp error: 535 5.7.8 Username and Password not accepted for gmail in go

Viewed 38728

I'm trying to test an app's outgoing emails from localhost using this function:

func SendContactUsForm(subject, email, body string) error {
    var err error
    from := "mysender@gmail.com"
    pass := "somecrazypw"
    to := "mydestination@gmail.com"
    msg := "From: " + from + "\n" +
    "To: " + to + "\n" +
    "Subject: Contact form:" + subject + "\n" + body
    err = smtp.SendMail("smtp.gmail.com:587",
        smtp.PlainAuth("", from, pass, "smtp.gmail.com"),
        from, []string{to}, []byte(msg))
    if err != nil {
        log.Printf("smtp error: %s", err)
        return err
    }
    return nil
}

But I get this error:

send_emails.go:171: smtp error: 535 5.7.8 Username and Password not accepted. Learn more at 5.7.8 https://support.google.com/mail/?p=BadCredentials a7sm5381413wmh.14 - gsmtp contact.go:38: error seding contact us form 535 5.7.8 Username and Password not accepted.

Despite the fact that the credentials of mysender@gmail.com are correct and I have enabled Allow less secure apps on mysender@gmail.com.

So what could be wrong here? And how can I fix it?

4 Answers

Generate a password from https://security.google.com/settings/security/apppasswords and use that password instead.

An App Password is a 16-digit passcode that gives an app or device restricted access to your Google Account without having to divulge your personal password and complete access to your Google Account.

More details on how to generate one!

Go to Security inside your gmail account and enable 3party APP access... This will fix the problem. FYI, I believe this wont work if you have 2-step auth turned on. So you may have to create a new gmail account and then enable forwarding....

If you have enabled 2-factor authentication on your Google account then you can't use your regular password to access mail through code. You need to generate an app-specific password and use that instead your actual password.

Do the following steps to generate app specific password,

  • Log in to your Google account or use this link https://security.google.com/settings/security/apppasswords
  • Go to My Account > Sign-in & Security > App Passwords
  • Scroll down to Select App in the Password & sign-in methds and choose Other (custom name) Give this app password a name, Eg: "automailer"
  • Choose Generate Copy the long generated password and paste it into your script instead of your actual Gmail password.

enter image description here

login to gmail account. go to Manage your google account. turn ON Less secure app access after this when you try to send mail from your app you might get error . if so go to Security issues found ( it's first option in security tab of google account ) here you need to verify that last activities is verified and its you .

Related