com.google.api.client.googleapis.json.GoogleJsonResponseException:400错误请求
来自(GoogleJsonResponseException.java:146(网址:com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogle JsonClientRequest.java:113(网址:com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogle JsonClientRequest.java:40(网址:com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.enterceptResponse(AbstractGoogleClientRequest.java:321(网址:com.google.api.client.HttpRequest.execute(HttpRequest.java:1065(网址:com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419(网址:com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352(网址:com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469(网址:org.gradle.GradleTest.insertMessage(GradleTest.java:132(网址:org.gradle.GradleTest.main(GradleTest.java:173(
只有当我们尝试插入具有大附件(超过5mb(的邮件时,才会出现此异常。
如果附件较小,则邮件插入正确。
插入邮件我尝试:
File file = new File(email);
FileInputStream fis = new FileInputStream(file);
long fileSize = file.length();
byte[] buf = new byte[(int)fileSize];
int readNum = fis.read(buf);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(buf);
String encodedEmail = Base64.encodeBase64URLSafeString(baos.toByteArray());
Message message = new Message();
message.setRaw(encodedEmail);
message = service.users().messages().insert(userId, message).execute();
请建议插入附件超过5mb的邮件的解决方案。
Gmail API文档中写道:
您可以通过以下任何方式发出上传请求。指定与uploadType请求参数一起使用的方法。
简单上载:uploadType=媒体。为了快速传输较小的文件,例如5MB或更小。
多部分上传:uploadType=多部分。对于快速传输较小的文件和元数据;将文件一起传输以及描述它的元数据,所有这些都在一个请求中。
可恢复upload:uploadType=可恢复。用于可靠的传输,尤其是对于较大的文件非常重要。使用此方法,可以使用会话发起请求,该请求可选地可以包括元数据。这是一个适用于大多数应用程序的好策略,因为它也适用于以每次上传一个额外的HTTP请求为代价的较小文件。
由于要发送数据>5 MB,使用多部分或可恢复选项。多部分示例:(也取自文档(:
public static MimeMessage createEmailWithAttachment(String to,
String from,
String subject,
String bodyText,
File file) throws MessagingException, IOException {
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
MimeMessage email = new MimeMessage(session);
email.setFrom(new InternetAddress(from));
email.addRecipient(javax.mail.Message.RecipientType.TO,
new InternetAddress(to));
email.setSubject(subject);
MimeBodyPart mimeBodyPart = new MimeBodyPart();
mimeBodyPart.setContent(bodyText, "text/plain");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(mimeBodyPart);
mimeBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(file);
mimeBodyPart.setDataHandler(new DataHandler(source));
mimeBodyPart.setFileName(file.getName());
multipart.addBodyPart(mimeBodyPart);
email.setContent(multipart);
return email;
}