Gmail API插入邮件抛出 - 错误请求(400)

时间:2014-07-30 17:42:48

标签: java google-api-java-client gmail-api

尝试插入从MimeMessage加载的消息(如gmail api示例所示),一些 消息传递正常,但有些人抛出这个:

    com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
<HTML>
<HEAD>
<TITLE>Bad Request</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Bad Request</H1>
<H2>Error 400</H2>
</BODY>
</HTML>

    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:312)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1049)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)

代码是下一个:

     final ByteArrayOutputStream baos = new ByteArrayOutputStream();
     mime.writeTo(baos);
     String encodedEmail = Base64.encodeBase64URLSafeString(baos.toByteArray());
     tmpMail = new Message();
     tmpMail.setRaw(encodedEmail);
     client.users().messages().insert(this.taskInfo.getTargetAccount(), tmpMail).execute();

没有任何其他信息,可能导致该错误的原因是什么?

感谢。

UPD。看起来大于10Mb的消息会出现此错误。谷歌人,你能提供建议吗?感谢

2 个答案:

答案 0 :(得分:1)

看起来像我所拥有的:-)这里明确记录了35 MB的限制(https://developers.google.com/gmail/api/v1/reference/users/messages/insert,第4行),对大多数人来说不是问题,因为他们现有的电子邮件系统将电子邮件大小限制在一个较小的数字

final ByteArrayOutputStream output = new ByteArrayOutputStream();
message.writeTo(output);
final String raw = Base64.encodeBase64URLSafeString(output.toByteArray());
if (raw.length() > 35000000) {
    System.err.println("Message too large, skipping");
} else {
    try {
           getGmailService()
                        .users()
                        .messages()
                        .insert("me",
                                new Message().setRaw(raw)).execute();

答案 1 :(得分:0)

您需要使用媒体“/ upload”方法发送大的内容。 https://developers.google.com/gmail/api/guides/uploads