1

Gmail APIを使用してApp Engineにメールを送信しようとしています。以前は、資格情報ページにサービスアカウントキーを作成し、setServiceAccountPrivateKeyFromP12Fileパラメータにある.P12ファイルを生成しました。これには、アカウントの[email protected]にサービスアカウントページに結合されたIDキーがあります。コード:それは私にこのエラーが返されますGmail APIを使用してメールを送信するGoogle App Engine

/* Application name. */ 
    private static final String APPLICATION_NAME = "appnamefromappengine"; 

    String emailAddress = "[email protected]"; 
    JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); 
    try { 
     HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); 

     Set<String> scopes = new HashSet<String>(); 
     scopes.add(GmailScopes.GMAIL_SEND); 
     scopes.add(GmailScopes.GMAIL_COMPOSE); 
     scopes.add(GmailScopes.MAIL_GOOGLE_COM); 
     scopes.add("https://www.googleapis.com/auth/admin.directory.user"); 

     GoogleCredential credential = new GoogleCredential.Builder() 
      .setTransport(httpTransport) 
      .setJsonFactory(JSON_FACTORY) 
      .setServiceAccountId(emailAddress) 
      .setServiceAccountPrivateKeyFromP12File(new File("/home/myuser/Test/src/main/webapp/resources/**somename**cd30e7118ad5.p12")) 
      .setServiceAccountScopes(scopes) 
      .setServiceAccountUser("[email protected]") 
      .build(); 
     Gmail gmail = new Gmail 
      .Builder(httpTransport, JSON_FACTORY, credential) 
      .setApplicationName(APPLICATION_NAME) 
      .build(); 

     Properties props = new Properties(); 
     Session session = Session.getDefaultInstance(props, null); 
     MimeMessage message = new MimeMessage(session); 
     message.setFrom(new InternetAddress("[email protected]")); 
     message.addRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress("[email protected]")); 
     message.setSubject("Test Mail"); 
     message.setText("Test Mail"); 

     Message msg = createMessageWithEmail(message); //createMessageWithEmail function from Gmail API 
     msg = gmail.users().messages().send(emailAddress, msg).execute(); 

     System.out.println("Mail was sent. Message id: " + msg.getId()); 

    } catch (GeneralSecurityException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (MessagingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request { "code" : 400,
"errors" : [ { "domain" : "global", "message" : "Bad Request", "reason" : "failedPrecondition" } ],
"message" : "Bad Request" }

は、私はコード内やGoogleクラウドコンソールにここで間違って設定していたパラメータわかりません。それ以外に何ができますか?

+2

チェック[GmailのREST API:400不正な要求+失敗した前提条件](http://stackoverflow.com/questions/29327846/gmail-rest- api-400-bad-request-failed-precondition): – KENdi

+0

@KENdiが提供するリンクは役に立ちましたか?失敗した前提条件を絞ったり解決したりできましたか? – Nicholas

+1

それは@ニコラスだった。問題は、サービスアカウントへの委任ドメイン全体の権限を管理コンソールに設定しなかったことです。いずれにしても、誰かがGmail APIを使用してメールを送信したい場合は、すべてのコードが完全に機能しています。質問は、コードに電子メールAPIの承認された送信者を使用する方法の答えを補完することができます。誰かがそのセクションに電子メールを登録したら、その電子メールを参照する方法。全てに感謝。 –

答えて

2

問題は、ドメイン全体の権限をサービスアカウントに管理コンソールに設定しなかったことです。

  1. Go to your Google Apps domain’s Admin console.

  2. Select Security from the list of controls. If you don't see Security listed, select More controls from the gray bar at the bottom of the page, then select Security from the list of controls. If you can't see the controls, make sure you're signed in as an administrator for the domain.

  3. Select Show more and then Advanced settings from the list of options.

  4. Select Manage API client access in the Authentication section.

  5. In the Client Name field enter the service account's Client ID. You can find your service account's client ID in the Service accounts section of the Developers Console's Permissions page.

  6. In the One or More API Scopes field enter the list of scopes that your application should be granted access to. For example, if your application needs domain-wide access to the Google Drive API and the Google Calendar API, enter: https://www.googleapis.com/auth/drive , https://www.googleapis.com/auth/calendar .

  7. Click Authorize.

すべてのドキュメント:これはSO疑問
​​

関連する問題