Tôi đang cố gửi email từ gmail trong thử nghiệm JUnit bằng tài khoản dịch vụ.Tài khoản dịch vụ Api Gmail không đáp ứng điều kiện tiên quyết không thành công
Tôi có thử nghiệm này:
@Test
public void testGmailCredential() throws GeneralSecurityException, URISyntaxException {
try {
InputStream is = getClass().getClassLoader().getResourceAsStream("myProject.json");
GoogleCredential credential = GoogleCredential.fromStream(is).createScoped(GmailScopes.all());
System.out.println("Scopes are " + credential.getServiceAccountScopesAsString());
Gmail gmailService = new Gmail.Builder(getHttpTransport(), JSON_FACTORY, credential)
.setApplicationName("WHAT SHOULD THIS VALUE BE?")
//.setHttpRequestInitializer(credential)
.build();
InternetAddress to = new InternetAddress("[email protected]", "Tom Catfish");
InternetAddress from = new InternetAddress("[email protected]", "Some Name");
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
MimeMessage email = new MimeMessage(session);
email.setFrom(from);
email.addRecipient(javax.mail.Message.RecipientType.TO, to);
email.setSubject("Subject here");
email.setText("body here");
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
email.writeTo(buffer);
byte[] bytes = buffer.toByteArray();
String encodedEmail = Base64.getUrlEncoder().encodeToString(bytes);
Message message = new Message();
message.setRaw(encodedEmail);
message = gmailService.users().messages().send("me", message).execute();
System.out.println("Message id: " + message.getId());
System.out.println(message.toPrettyString());
// other code...
}
nào thất bại với điều này:
Scopes are https://www.googleapis.com/auth/gmail.compose
com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Bad Request",
"reason" : "failedPrecondition"
} ],
"message" : "Bad Request"
}
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
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:1056)
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 com.op.services.NotificationServiceTest.testGmailCredential(NotificationServiceTest.java:90)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Tôi có tập tin src/test/resources/myProject.json
chứa các thông tin này:
{
"type": "service_account",
"project_id": "xxxxxxxxxxx",
"private_key_id": "28341330...",
"private_key": "-----BEGIN PRIVATE KEY-----\.........\n-----END PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "1182....",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/myApp%40xxxxxxx.iam.gserviceaccount.com"
}
Làm thế nào tôi có thể khắc phục những gì đang gây ra việc khôi phục lại không chính xác, không hữu ích này từ Google?
server trả lời với http 400. Câu hỏi là: trong đó máy chủ; bạn đang sử dụng proxy? Bạn có thể đánh cắp lưu lượng truy cập mạng không? – rds
Vì bạn có nguồn mã của ứng dụng khách googleapis, bạn có thể đặt một dấu gạch ngang trong AbstractGoogleClientRequest interceptResponse() để xem thêm chi tiết về phản hồi. – rds