首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在gmail-api中获取发件人邮件

在gmail-api中获取发件人邮件
EN

Stack Overflow用户
提问于 2015-10-10 09:45:17
回答 4查看 2.9K关注 0票数 2

我试图弄清楚,通过gmail开发者的guide.The消息部分,gmail不包含任何关于发件人的细节,任何帮助都是非常感谢的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-10-11 09:05:18

好的,我最终完成了it.Get消息有效负载,然后通过名称为" from“的标头从有效载荷循环中获取报头。 标题的格式为header=name:"somename“值:”somevalue“ 这是我的代码,希望它能帮到某人

代码语言:javascript
复制
private List<MessageReader> getDataFromApi() throws IOException {
            String user = "me";
            List<MessageReader> labels = new ArrayList<MessageReader>();
            ListMessagesResponse listResponse = mActivity.mService.users().messages().list(user).setQ(query).execute();
            //int i=0;
            for (Message label : listResponse.getMessages()) {
                Message m =  mActivity.mService.users().messages().get(user, label.getId()).execute();
                String a =""; 
                try{
                    List<MessagePart> parts  =m.getPayload().getParts();
                    List<MessagePartHeader> headers = m.getPayload().getHeaders();
                    MessageReader mreader = readParts(parts);
                    mreader.setDate(m.getInternalDate());
                    for(MessagePartHeader header:headers){
                        String name = header.getName();
                        if(name.equals("From")||name.equals("from")){
                            mreader.setSender(header.getValue());
                            break;
                        }
                    }
                    labels.add(mreader);
                 }catch(Exception e){
                     a+="The following error occurred:\n" +
                                e.getMessage();
                    }

            }
            return labels;//extractData(labels);
        }


private MessageReader readParts(List<MessagePart> parts){
        MessageReader mreader = new MessageReader();
        int cnt =0;
        for(MessagePart part:parts){

            try{

                String mime = part.getMimeType();           
                if(mime.contentEquals("text/plain")){
                    String s = new String(Base64.decodeBase64(part.getBody().getData().getBytes()));
                    mreader.setText(s);
                }else if(mime.contentEquals("text/html")){
                    String s = new String(Base64.decodeBase64(part.getBody().getData().getBytes()));
                    mreader.setHtml(s);

                }else if(mime.contentEquals("multipart/alternative")){
                    List<MessagePart> subparts  =part.getParts();
                    MessageReader subreader = readParts(subparts);
                    mreader.setText(subreader.getText());
                    mreader.setHtml(subreader.getHtml());
                }else if(mime.contentEquals("application/octet-stream")){
                    cnt++;
                    mreader.setNo_of_files(cnt);
                }

            }catch(Exception e){
                // get file here

            }

        }
        return mreader;
    }





public class MessageReader {

    private String text;
    private String html;
    int no_of_files;
    private String sender;
    private long date;
    // file data to be made


    public String getSender() {
        return sender;
    }
    public void setSender(String sender) {
        this.sender = sender;
    }
    public long getDate() {
        return date;
    }

    public void setDate(long date) {
        this.date = date;
    }
    public String getText() {
        return text;
    }
    public void setText(String text) {
        this.text = text;
    }
    public String getHtml() {
        return html;
    }
    public void setHtml(String html) {
        this.html = html;
    }
    public int getNo_of_files() {
        return no_of_files;
    }
    public void setNo_of_files(int no_of_files) {
        this.no_of_files = no_of_files;
    }



}
票数 5
EN

Stack Overflow用户

发布于 2015-10-10 16:09:13

您可以首先获得列表消息,以获取消息的id

请求:

代码语言:javascript
复制
GET https://www.googleapis.com/gmail/v1/users/me/messages

响应:

代码语言:javascript
复制
{
 "messages": [
    {
     "id": "1504f80fcf4ceb5f",
     "threadId": "1504f80fcf4ceb5f"
    }, ...
  ]
}

然后,您可以通过获取实际消息在第二个请求中请求这些消息的发送方。

请求:

代码语言:javascript
复制
format = metadata
metadataHeaders = From
fields = payload/headers

GET https://www.googleapis.com/gmail/v1/users/me/messages/1504f80fcf4ceb5f?format=metadata&metadataHeaders=From&fields=payload%2Fheaders

响应:

代码语言:javascript
复制
{
 "payload": {
  "headers": [
   {
    "name": "From",
    "value": "YouTube <noreply@youtube.com>"
   }
  ]
 }
}
票数 1
EN

Stack Overflow用户

发布于 2017-09-20 19:04:25

假设您已经使用ListMessagesResponse获得消息id,下面是如何从字段中获取发送方的方法:

代码语言:javascript
复制
public String getFrom(String userId, String messageId) throws IOException {
        Message message = mService.users().messages().get(userId, messageId).execute();
        List<MessagePartHeader> headers = message.getPayload().getHeaders();
        String from="";
        for (MessagePartHeader header:headers){
            if(header.getName().equals("From")){
                from=header.getValue();
                break;
            }
        }
        return from;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33052582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档