2016-12-08 40 views
1

私は私のアプリではGmailのAPIを使用して、それは昨日それまでは正常に動作して、今私は私がマルチパートを使用していGmailのAPIエラー:要求ペイロードサイズが制限を超えて:1048576バイト

V/Error: 400 Bad Request 
{ 
    "code" : 400, 
    "errors" : [ { 
    "domain" : "global", 
    "message" : "Request payload size exceeds the limit: 1048576 bytes.", 
    "reason" : "badRequest" 
    } ], 
    "message" : "Request payload size exceeds the limit: 1048576 bytes.", 
    "status" : "INVALID_ARGUMENT" 
} 

を取得していますここでは、このために回避することができるもの、それが戻って完全に数日働いていたと私は1メガバイトよりも大きなファイルを送信しようとするたびに、今、私は上記のエラーを取得

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; 
} 

コードのスニペット、ある、ファイルを添付?

ありがとうございます

+0

この問題はちょうどコードの変更なしで起こったことは間違いです。 [multipart upload](https://developers.google.com/gmail/api/guides/uploads#multipart)を見ましたか?はるかに大きなメッセージサイズを許可します。 – Tholle

+0

私は古い完全に動作するサンプルの1つをやり直しましたが、今でも同じ問題が発生しています。 – Max

答えて

0

次のいずれかの方法でアップロードリクエストを行うことができます。 uploadTypeリクエストパラメータで使用しているメソッドを指定します。

簡易アップロード:uploadType = media。小さなファイルをすばやく転送するには、たとえば、5 MB以下です。

マルチパートアップロード:uploadType = multipart。小さなファイルやメタデータをすばやく転送するため。ファイルを記述するメタデータと共にファイルをすべて1回の要求で転送します。

再アップロード可能:uploadType =再開可能。信頼性の高い転送のために、特に大きなファイルでは重要です。この方法では、セッション開始要求を使用します。要求には、オプションでメタデータを含めることができます。これは、アップロードごとに1つの追加の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; 
    } 

詳細については、マニュアルを参照してください:https://developers.google.com/gmail/api/guides/uploads

0

私はこれと同じ問題がありました。私の場合は、制限が35 MBであるというGmailの文書にもかかわらず、1 MBを超えるドラフトを作成できませんでした。

いくつかのテストの結果、この問題はGmail APIの.NETクライアントライブラリ固有の問題であることがわかりました。私の回避策は、.NETクライアントライブラリをバイパスして、Gmail APIを呼び出す独自のコードを作成することでした。私はここに私のソリューションを掲載しました:http://www.gmass.co/blog/call-the-gmail-api-in-net-without-using-client-library/

関連する問題