2016-07-26 80 views
2

我想使用Gmail API(不是JavaMail)發送電子郵件。我在論壇上看過很多類似的話題,但我仍然有問題。嘗試使用Java API中的Gmail API發送電子郵件時出錯

首先,我這樣說的:https://developers.google.com/gmail/api/guides/sending

我impelemented方法:的MimeMessage createEmail,信息createMessageWithEmail和消息的sendMessage

然後我注意到,我沒有對象Gmail服務的定義,所以我需要一個類GmailQuickstart,這是在這裏:https://developers.google.com/gmail/api/quickstart/java

和我實現:類GmailQuickstart,方法憑證授權()和方法的Gmail getGmailService()

最後我寫了一個主:

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); 
} 

這之後,我有錯誤的長列表:

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) 

我知道,在堆大約有類似的錯誤很多話題,但我不知道如何糾正它。 任何人都可以告訴我發生了什麼問題,或者您知道使用Gmail API發送電子郵件的另一種方式嗎?

+0

你在哪裏提供的授權證書('client_secret.json')?錯誤表示您的憑據丟失或無效。 –

+0

這個文件我在同一個文件夾中,我有我的課 –

回答

4

問題是您的權限不足。這行代碼的問題是:

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

如果您檢查listing labels參考,你將看到許可https://www.googleapis.com/auth/gmail.labels就夠了。

然而,這不足以用於sending messages。你可以改變你的SCOPES包括https://mail.google.com/同時發展,直到你知道你需要什麼權限:

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

我改變了你寫的行,但我有同樣的錯誤。 –

+1

確保您刪除了存儲的憑據,因爲這些憑據仍將使用錯誤的範圍。 –

+1

非常感謝你! – Yster

相關問題