2017-07-05 79 views
0

我目前使用Gmail API一次发送多个电子邮件。我做这个顺序:如何使用Gmail的批量请求发送API

  1. 通过GmailAPI发送电子邮件
  2. 等待GmailAPI响应。
  3. 收到响应后,更新GmailAPI返回的带有ThreadID的记录。
  4. 对其他电子邮件重复步骤1-3。

我正在阅读关于批量处理sendEmail API请求的问题,以便我们对API进行一次调用并处理响应。 尽管我可以批量处理所有请求并发送,但我不确定如何处理回复。

我不确定如何处理回复。如果我在批处理请求中有30个发送电子邮件请求,那么当收到批处理响应时,如何确定哪个响应是针对哪个电子邮件?

这是我实现

BatchRequest batch = gmailService.batch(); 
gmailService.users().messages().send("me", message).queue(batch, callback); 
batch.execute(); 

    final List<Message> messages = new ArrayList<Message>(); 
     JsonBatchCallback<Message> callback = new JsonBatchCallback<Message>() { 
      public void onSuccess(Message message, HttpHeaders responseHeaders) { 
       System.out.println("MessageThreadID:"+ message.getThreadId()); 
       System.out.println("MessageID:"+ message.getId()); 
       synchronized (messages) { 
        messages.add(message); 
       } 
      } 

      @Override 
      public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders) 
        throws IOException { 
      } 
     }; 

回答

1

我不知道如何处理响应。如果我在批处理请求中有30个发送电子邮件请求,那么当收到批处理响应时,如何确定哪个响应是针对哪个电子邮件?

根据该Batch Request Response文件:

响应于批量要求

服务器的响应是与 多部分/混合内容类型的单个标准的HTTP响应;每个部分都是对批量请求中 个请求之一的响应,顺序与请求相同。

与请求中的部分一样,每个响应部分都包含一个完整的 HTTP响应,其中包括状态码,标头和正文。和 请求中的各个部分一样,每个响应部分前面都有一个 Content-Type标头,用于标记部件的开始。

您可以按照提出请求的顺序获取完整的HTTP响应,其状态码,其标题和正文。所以响应一是针对第一个请求,响应2是针对第二个请求等等。通过这种方式,您可以确定哪个电子邮件的响应。