-
구글 gmail API 연동 - 라벨공부 2023. 8. 9. 23:01728x90https://binsblog.tistory.com/entry/구글-Workspace-API-사용법
위와 같이 우선 설정한다.
implementation 'com.google.api-client:google-api-client:2.0.0' implementation 'com.google.oauth-client:google-oauth-client-jetty:1.34.1' implementation 'com.google.apis:google-api-services-gmail:v1-rev20220404-2.0.0'
gradle 파일에 위와 같이 추가한 후 로드한다.
private static final List<String> SCOPES = Collections.singletonList(GmailScopes.GMAIL_LABELS);
라벨에 대한 scope를 지정해 주어 API를 사용할 수 있게 해준다.
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException{ // Load client secrets. InputStream inputStream = GmailService.class.getResourceAsStream(CREDENTIALS_FILE_PATH); if(inputStream==null){ throw new FileNotFoundException("Resource not found:" +CREDENTIALS_FILE_PATH); } GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(inputStream)); // Build flow and trigger user authorization request. GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( HTTP_TRANSPORT,JSON_FACTORY,clientSecrets,SCOPES) .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH))) .setAccessType("offline") .build(); LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build(); Credential credential = new AuthorizationCodeInstalledApp(flow,receiver).authorize("user"); //returns an authorized Credential object. return credential; }
OAuth2를 이용하여 유저가 서비스를 사용할 수 있도록 허용해준다. 다음 메소드를 실행시키면 아래와 같은 URL이 나오게 된다.
https://accounts.google.com/o/oauth2/auth?access\\\_type=offline&client\\\_id="클라이언트ID"&redirect\\\_uri=http://localhost:8888/Callback&response\\\_type=code&scope=https://www.googleapis.com/auth/gmail.labels redirect_uri에 나오는 주소는 OAuth2 클라이언트 ID의 redirect_uri값에 넣어야 정상적으로 처리된다. OAuth 인증이 완료 된 후 라벨에 대한 목록을 불러 올 수 있다.
로그인 후
창이 뜨면 토큰이 생성되고 토큰을 이용하여 서비스를 이용한다.
라벨 목록
public Object quickStart() throws GeneralSecurityException, IOException { final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); //OAuth2 인증 요청 Gmail service = new Gmail.Builder(HTTP_TRANSPORT,JSON_FACTORY,getCredentials(HTTP_TRANSPORT)) .setApplicationName(APPLICATION_NAME) .build(); String user = "me"; ListLabelsResponse listLabelsResponse = service.users().labels().list(user).execute(); List<Label> labels = listLabelsResponse.getLabels(); if(labels.isEmpty()){ return ("No labels found."); }else{ return labels; } }
위의 코드를 상세히 들어가 보면
public List list(java.lang.String userId) throws java.io.IOException { List result = new List(userId); initialize(result); return result; } private static final String REST_PATH = "gmail/v1/users/{userId}/labels"; protected List(java.lang.String userId) { super(Gmail.this, "GET", REST_PATH, null, com.google.api.services.gmail.model.ListLabelsResponse.class); this.userId = com.google.api.client.util.Preconditions.checkNotNull(userId, "Required parameter userId must be specified."); }
라벨에 대한 목록을 얻기 위한 API는 아래와 같다.
GET https://gmail.googleapis.com/gmail/v1/users/{userId}/labels
다음과 같이 라벨에 대한 정보를 가져오기 위해 필요한 API PATH를 gmail 패키지를 이용하여 설정한다.
위와 같이 API를 수신하여 라벨에 대한 목록을 가져온다.
라벨 생성
public Object createLabel() throws GeneralSecurityException, IOException { final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); Gmail service = new Gmail.Builder(HTTP_TRANSPORT,JSON_FACTORY,getCredentials(HTTP_TRANSPORT)) .setApplicationName(APPLICATION_NAME) .build(); String user = "me"; //생성 라벨 지정 Label label = new Label(); label.setLabelListVisibility("labelShow"); label.setMessageListVisibility("show"); label.setName("샘플"); //라벨 생성 Label listLabelsResponse = service.users().labels().create(user,label).execute(); Label labels = listLabelsResponse.clone(); if(labels.isEmpty()){ return ("No labels found."); }else{ return labels; } }
위 코드를 보게된다면 생성할 라벨의 항목을 지정해 준 후 그 라벨의 값을 gmail 패키지에 넘겨주어 대신 API를 실행시켜 준다.
패키지 내부로 상세히 들어가 보면
public Create create(java.lang.String userId, com.google.api.services.gmail.model.Label content) throws java.io.IOException { Create result = new Create(userId, content); initialize(result); return result; }
userId, content 값을 전달해주어야 한다. content 값에는 label이 들어가 있어야 한다.
private static final String REST_PATH = "gmail/v1/users/{userId}/labels"; protected Create(java.lang.String userId, com.google.api.services.gmail.model.Label content) { super(Gmail.this, "POST", REST_PATH, content, com.google.api.services.gmail.model.Label.class); this.userId = com.google.api.client.util.Preconditions.checkNotNull(userId, "Required parameter userId must be specified."); checkRequiredParameter(content, "content"); checkRequiredParameter(content.getLabelListVisibility(), "Label.getLabelListVisibility()"); checkRequiredParameter(content, "content"); checkRequiredParameter(content.getMessageListVisibility(), "Label.getMessageListVisibility()"); checkRequiredParameter(content, "content"); checkRequiredParameter(content.getName(), "Label.getName()"); }
라벨을 생성하기 위한 API는 다음과 같다.
POST https://gmail.googleapis.com/gmail/v1/users/{userId}/labels
다음과 같이 라벨에 대한 정보를 저장하기 위해 필요한 API PATH를 gmail 패키지를 이용하여 설정한다.
위와 같이 API를 수신하여 라벨을 저장한다.지정된 라벨 가져오기
public Object getLabel() throws GeneralSecurityException, IOException { final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); Gmail service = new Gmail.Builder(HTTP_TRANSPORT,JSON_FACTORY,getCredentials(HTTP_TRANSPORT)) .setApplicationName(APPLICATION_NAME) .build(); String user = "me"; Label listLabelsResponse = service.users().labels().get(user,"Label_6").execute(); Label labels = listLabelsResponse.clone(); if(labels.isEmpty()){ return ("No labels found."); }else{ return labels; } }
위 코드를 보게된다면 지정된 라벨의 값을 가져오기 위해 label Id를 gmail 패키지에 넘겨주어 대신 API를 실행시켜 준다.
라벨을 가져오기 위한 API는 다음과 같다.
GET https://gmail.googleapis.com/gmail/v1/users/{userId}/labels/{id}
라벨 삭제하기
public Object delLabel() throws GeneralSecurityException, IOException { final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); Gmail service = new Gmail.Builder(HTTP_TRANSPORT,JSON_FACTORY,getCredentials(HTTP_TRANSPORT)) .setApplicationName(APPLICATION_NAME) .build(); String user = "me"; service.users().labels().delete(user,"Label_6").execute(); return null; }
위 코드를 보게된다면 라벨을 삭제하기 위해 label Id를 gmail 패키지에 넘겨주어 대신 API를 실행시켜 준다.
라벨을 삭제하기 위한 API는 다음과 같다.
DELETE https://gmail.googleapis.com/gmail/v1/users/{userId}/labels/{id}
코드: 라벨
출처: 구글 라벨관리
728x90반응형'공부' 카테고리의 다른 글
nvm 설치 (0) 2023.08.11 구글 Gmail 연동 - 메일 작성 및 보내기 (0) 2023.08.11 구글 Workspace API 사용법 (0) 2023.08.07 깃 (0) 2023.08.02 IntelliJ 단축키 모음 (window&mac) (0) 2023.07.26