com.google.api.client.googleapis.json.GoogleJsonResponseException:400错误请求
com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146) 在com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113) 在com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40) 在com.google.api.client.googleapis.services.AbstractGoogleClientRequest $ 1.interceptResponse(AbstractGoogleClientRequest.java:321) 在com.google.api.client.http.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的邮件的解决方案。
答案 0 :(得分:1)
您可以通过以下任何方式进行上传请求。使用uploadType请求参数指定您使用的方法。
简单上传:uploadType = media。为了快速传输较小的文件, 例如,5 MB或更少。
分段上传:uploadType = multipart。对于 快速传输较小的文件和元数据;传输文件 使用描述它的元数据,所有这些都在一个请求中。
可恢复 upload:uploadType = resumable。特别是为了可靠的转移 对于较大的文件很重要使用此方法,您可以使用会话 发起请求,可选地可以包括元数据。这是一个 适用于大多数应用程序的良好策略,因为它也适用于 较小的文件,每次上传一个额外的HTTP请求。
由于您要发送数据> 5 MB,使用multipart或resumable选项。 multipart的示例:(也取自文档):
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;
}