메일에 들어가는 첨부파일은 2가지로 구분할 수 있음
1. inline image
본문내에 이미지가 들어가있는 경우, 이미지의 파일 정보는 attachment로 따로 빠져있음.
메일 본문의 이미지를 보여주려면 인라인 이미지를 로드한 다음 base64로된 이미지 정보를 <img> 태그로 넣어서 표현해야함.
2. attachment file
첨부를 통한 file이며, 확장자에 상관없이 메일에 포함된 첨부파일.
이 첨부 파일 정보 또한 메일 detail info를 부르더라도 파일의 이름이나 사이즈 같이 간략한 정보만 제공되고 다운로드 기능과 연결할 시에는 attachment 정보를 로드해야함.
public static void loadMailAttachment(Context context, Account account, String mailId, String fileId, GmailNetworkListener listener) {
try {
GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(context, Collections.singleton(MAIL_SCOPE));
credential.setSelectedAccount(account);
Gmail service = new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).build();
new GetMailAttachmentTask(account, service, mailId, fileId, listener).execute();
} catch (Exception e) {
e.printStackTrace();
}
}
private static class GetMailAttachmentTask extends AsyncTask<Void, Void, MessagePartBody> {
private Account account;
private Gmail service;
private String mailId;
private String fileId;
private GmailNetworkListener listener;
public GetMailAttachmentTask(Account account, Gmail service, String mailId, String fileId, GmailNetworkListener listener) {
this.account = account;
this.service = service;
this.mailId = mailId;
this.fileId = fileId;
this.listener = listener;
}
@Override
protected MessagePartBody doInBackground(Void... voids) {
if (listener == null) return null;
try {
return service.users().messages().attachments().get(account.name, mailId, fileId).execute();
} catch (IOException e) {
e.printStackTrace();
listener.onFailure(e.toString());
}
return null;
}
@Override
protected void onPostExecute(MessagePartBody result) {
super.onPostExecute(result);
if (listener != null) {
listener.onSuccess(result);
}
}
}