Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error when trying to send an email using Gmail API in Java

I want to send an email using Gmail API (not JavaMail). I read many similar topics on forums, but I have still a problem.

First I read this: https://developers.google.com/gmail/api/guides/sending

and I impelemented methods: MimeMessage createEmail, Message createMessageWithEmail and Message sendMessage

Then I noticed that I don't have definition of object Gmail service, so I needed a class GmailQuickstart, which is here: https://developers.google.com/gmail/api/quickstart/java

and I implemented: class GmailQuickstart, method Credential authorize() and method Gmail getGmailService()

Finally I wrote a main:

public static void main(final String[] args) throws MessagingException, IOException {
    String APPLICATION_NAME = "gmailProject";
    HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
    JsonFactory JSON_FACTORY = new JacksonFactory();
    Credential credential = GmailQuickstart.authorize();

    String to = "[email protected]";
    String from = "[email protected]";
    String subject = "Subject";
    String bodyText = "Body";
    MimeMessage emailcontent = createEmail(to, from, subject, bodyText);
    createMessageWithEmail(emailcontent);
    Gmail service = new com.google.api.services.gmail.Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
            .setApplicationName(APPLICATION_NAME).build();
    sendMessage(service, "me", emailcontent);
}

After this I have a long lists of errors:

Exception in thread "main"com.google.api.client.googleapis. json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
  "domain" : "global",
  "message" : "Insufficient Permission",
  "reason" : "insufficientPermissions"
} ],
"message" : "Insufficient Permission"
}
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJs nResponseException.java:146)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1065)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
    at org.actuarlib.outsourcing.mail.Mail.sendMessage(Mail.java:78)
    at org.actuarlib.outsourcing.mail.Mail.main(Mail.java:195)

I know that on stack there are many topics about similar error, but I don't know how to correct it. Anyone can tell me what's wrong or do you know another way to send an email using Gmail API?

like image 297
MMM Avatar asked Oct 25 '25 01:10

MMM


1 Answers

The problem is that you have authorized with insufficient permission. This line of code is the problem:

private static final List<String> SCOPES =
        Arrays.asList(GmailScopes.GMAIL_LABELS);

If you check the reference for listing labels, you will see that the permission https://www.googleapis.com/auth/gmail.labels is enough.

This is however not sufficient for sending messages. You can change your SCOPES to include https://mail.google.com/ while developing, until you know exactly what permission you need:

private static final List<String> SCOPES =
        Arrays.asList(GmailScopes.MAIL_GOOGLE_COM);
like image 171
Tholle Avatar answered Oct 26 '25 15:10

Tholle