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?
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With