7

我们如何仅在 gmail API 的 api 响应中捕获电子邮件地址。fields参数设置为,它返回的 payload/headers数据比我们在响应中需要的多得多。我们需要的只是JSON 响应中的valuename/value对;例如

我们现在得到的完整响应看起来像这样

    {
     "payload": {
     "headers": [
                 {
                  "name": "Delivered-To",
                  "value": "xxxxxxx"
                {
                 "name": "Received",
                 "value": "xxxxxxxx"
                },
                {
                "name": "Received-SPF",
                "value": "----"
                 },......
                 {
                  "name": "To",
                  "value": "xxxxxxx" 
                 }, ...... E.T.C........E.T.C ......

  /*All we want is one name/value pair to be returned e.g. */
      {
        "payload": {
                 "headers": [
                   {
               "name": "X-Failed-Recipients",
               "value": "............."
               }
             ]
      }

一个更好的问题可能是有没有比通过 gmail API 更好的方法来捕获退回/退回的邮件?

此外,是否可以请求 XML 响应而不是 JSON。gmail API如何做到这一点?

谢谢 !!

4

3 回答 3

4

您可以执行 messages.get(format=METADATA, metadataIncludeHeaders=["To", "From", "Subject"]) 例如,现在只请求您关心的特定标头。请注意,这仅适用于元数据格式(它也不包括正文,如果您希望所有正文都收到完整的电子邮件。根据标题列表,将其转换为地图应该不难/键的字典 => [列表,的,值]。

至于您的第二个问题,是的,您绝对可以以任何您想要的格式请求回复。不过,这是一个标准的 Google API 问题。我找不到很好的参考资料(肯定会进行一些搜索),但通常您可以设置“alt=xml”或“alt=" 查询参数以获取该格式的响应。不确定这是如何在任何特定的客户端库中公开的。

于 2014-10-07T03:12:24.987 回答
0

首先,您需要获取您的消息有效负载,然后您想使用该getall方法返回一个标头列表,然后您可以使用getitem从该列表中提取您想要的任何特定标头。

于 2014-08-07T16:32:30.427 回答
0

我将 String 转换为 String 并将其作为 JSON Array 并遍历它以获取我需要的 JSON 对象。

private static DirtyMail getHeaderParts(DirtyMail mail, List<MessagePartHeader> headers)
             {
                 try {
                     //Convert the header into JSON Array for easy processing of data.
                     JSONArray headerArray = new JSONArray(headers.toString());
                     for(int n = 0; n < headerArray.length() ; n++) {
                         JSONObject jsonObject = headerArray.getJSONObject(n);

                         //Pull date
                         if(jsonObject.get(Constants.DATE)!=null) {
                            mail.setDate(jsonObject.getString(Constants.DATE));
                         }

                         //Pull Subject

                         //Pull reply-to address

                         //Pull delivered-from address

                         //Pull delivered-to address

                         Log.d(TAG, "JSON Object : "+ jsonObject);
                     }
                     //Log.d(TAG,"header String: "+headers.toString());
                 } catch (Exception e) {
                     e.printStackTrace();
                 }

        return mail;
    }

我将这些值保存在 Constant 类中:

// Data pulled from inside the header
    public static final String DATE = "Date";
    public static final String SUBJECT = "Subject";
    public static final String REPLY_TO = "Reply-To";
    public static final String DELIVERED_TO = "Delivered-To";
    public static final String FROM = "From";

我不知道这是否是解决此问题的最佳方法,但这可以正常工作并根据我的需要提供数据。

于 2016-10-23T14:34:44.050 回答