2016-06-15 3 views
-1

Gmail API를 사용하여 Gmail에서 메일을 가져옵니다. 특히,이 URL을 사용하여 행 아웃 대화와 이메일 : 나는이 메시지를 입력 할 때, 본문 메시지는 "DF"를 볼 수 https://www.googleapis.com/gmail/v1/users/me/messages?q=in:chatsgmail api에서 인라인 이미지를 검색 하시겠습니까?

,이 구조를

{ 
    "id": "1555561f7b8e1sdf56b", 
    "threadId": "155552511dfsd83ce98", 
    "labelIds": [ 
    "CHAT" 
    ], 
    "snippet": "df", 
    "historyId": "270812", 
    "internalDate": "1466016331704", 
    "payload": { 
    "partId": "", 
    "mimeType": "text/html", 
    "filename": "", 
    "headers": [ 
     { 
     "name": "From", 
     "value": "\"Oscar J. Irún\" <[email protected]>" 
     } 
    ], 
    "body": { 
     "size": 2, 
     "data": "ZGY=" 
    } 
    }, 
    "sizeEstimate": 100 
} 

를 참조하십시오. 지금까지는 괜찮은 모든 것.

행 아웃 메시지가 이미지 일 때 문제가 발생합니다. snippet 필드는 비어 있으며 메시지의 첨부 파일을 표시하지 않습니다. 다음은 예입니다.

{ 
    "id": "155558233274d78c91", 
    "threadId": "15fd5552511d83ce98", 
    "labelIds": [ 
    "CHAT" 
    ], 
    "snippet": "", 
    "historyId": "27sd0827", 
    "internalDate": "1466018445133", 
    "payload": { 
    "mimeType": "text/html", 
    "filename": "", 
    "headers": [ 
     { 
     "name": "From", 
     "value": "\"Oscar J. Irún\" <[email protected]>" 
     } 
    ], 
    "body": { 
     "size": 0, 
     "data": "" 
    } 
    }, 
    "sizeEstimate": 100 
} 

이 인라인 이미지를 검색해야합니다. 어떤 도움을 주시면 감사하겠습니다!

+0

무엇이 정확하게 당신의 질문입니까? 이미지의 URL을 가져 오는 방법을 묻고 있습니까? –

+0

죄송합니다, 예 @WoodrowBarlow. 내 질문 편집 –

+0

Gmail API를 통해 채팅 메시지를 가져 오는 것은 [지원되지 않음] (http://stackoverflow.com/questions/25316138/find-timestamp-for-hangout-and-chat-messages-retrieved-with-gmail-api)입니다.), 첨부 파일을 가져 오는 것은 아마도 불가능합니다. – Tholle

답변

1

Users.messages.attachments:get을 사용하여 첨부 파일을 검색 할 수 있습니다. 이 요청에는 승인이 필요합니다. Gmail API에 대한 모든 요청은 인증 된 사용자의 승인을 받아야합니다. Gmail은 Google 계정을 인증하고 사용자 데이터에 대한 액세스 권한을 부여하기 위해 OAuth 2.0 프로토콜을 사용합니다.

HTTP 요청

GET https://www.googleapis.com/gmail/v1/users/userId/messages/messageId/attachments/id 

public static void getAttachments(Gmail service, String userId, String messageId) 
throws IOException { 
Message message = service.users().messages().get(userId, messageId).execute(); 
List<MessagePart> parts = message.getPayload().getParts(); 
for (MessagePart part : parts) { 
if (part.getFilename() != null && part.getFilename().length() > 0) { 
String filename = part.getFilename(); 
String attId = part.getBody().getAttachmentId(); 
MessagePartBody attachPart = service.users().messages().attachment(). 
get(userId, messageId, attId).execute(); 
byte[] fileByteArray = Base64.decodeBase64(attachPart.getData()); 
FileOutputStream fileOutFile = 
new FileOutputStream("directory_to_store_attachments" + filename); 
fileOutFile.write(fileByteArray); 
file OutFile.close(); 
} 
} 
} 
+0

감사합니다. 문제는 행 아웃 메시지 때문입니다. 첨부 파일이 없거나 아무것도없는 것으로 나타납니다. Gmail API로 검색된 일반 이메일에서는 작동하지만 행 아웃 메시지에서는 작동하지 않습니다. –

0

그냥 참고로 PHP를위한 솔루션이 비슷한입니다 : base64_decode (strtr은 ($ gmail-> 서비스 -> users_messages_attachments-> 수 ('나', $ 메시지 -> id, $ arrPart [ 'body'] [ 'attachmentId']) -> 데이터, '-_', '+ /'));

관련 문제