본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Google Mail

원문 보기 위키 갱신

Google Mail 컴포넌트는 Google Mail Web APIs를 통해 Gmail에 접근할 수 있게 해 주는 컴포넌트예요. OAuth 2.0 자격 증명(clientId·clientSecret·refreshToken 또는 서비스 계정 키)으로 인증하고, 7개 API(attachments·drafts·history·labels·messages·threads·users)의 메서드를 URI로 호출할 수 있어요. scheduler·security 옵션과 update-message-labels·draft 데이터 타입 트랜스포머도 제공합니다.

출처: 문서

본문

Camel 2.15부터 지원

컨슈머와 프로듀서를 모두 지원해요

Google Mail 컴포넌트는 Google Mail Web APIs를 통해 Gmail에 접근할 수 있게 해 줘요.

Google Mail은 Google 계정을 인증하고 사용자 데이터 접근을 승인할 때 OAuth 2.0 프로토콜을 사용해요. 이 컴포넌트를 쓰기 전에 계정을 만들고 OAuth 자격 증명을 생성해야 해요. 자격 증명은 clientId, clientSecret, refreshToken로 이루어져요. 오래 살아 있는 refreshToken을 만들 때 유용한 도구로 OAuth playground가 있어요.

서비스 계정이라면 자격 증명이 JSON 파일(serviceAccountKey)로 이루어져요. 도메인 전체 위임(delegation domain-wide authority)(delegate)과 하나, 여러 개, 또는 가능한 모든 GMail API Auth Scopes를 사용할 수도 있어요.

Maven 사용자는 이 컴포넌트를 위해 pom.xml에 다음 의존성을 추가해야 해요:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-google-mail</artifactId>
    <!-- use the same version as your Camel core version -->
    <version>x.y.z</version>
</dependency>

URI 형식 (URI Format)

GoogleMail 컴포넌트는 다음 URI 형식을 사용해요:

google-mail://endpoint-prefix/endpoint?[options]

옵션 설정 방법 (Configuring Options)

Camel 컴포넌트는 두 단계로 나눠 설정합니다:

  • component level

  • endpoint level

컴포넌트 옵션 설정 (Configuring Component Options)

컴포넌트 레벨에서는 엔드포인트들이 이어서 물려받는 일반적이고 공유되는 설정을 해요. 가장 상위의 설정 레벨이죠.

예를 들어 컴포넌트에는 보안 설정, 인증용 자격 증명, 네트워크 연결 URL 같은 것들이 있을 수 있어요.

컴포넌트에 따라 옵션이 몇 개뿐인 것도 있고 아주 많은 것도 있어요. 컴포넌트는 보통 널리 쓰이는 기본값이 미리 설정되어 있어서, 몇 가지 옵션만 설정하거나 아예 하나도 건드리지 않아도 되는 경우가 많아요.

컴포넌트는 다음 방법으로 설정할 수 있어요:

  • the Component DSL.

  • 설정 파일(application.properties, *.yaml 파일 등).

  • Java 코드에서 직접.

엔드포인트 옵션 설정 (Configuring Endpoint Options)

엔드포인트는 옵션이 많아서 설정에 시간을 더 쓰게 될 거예요. 이 옵션들이 엔드포인트가 원하는 일을 하도록 커스터마이즈해 줘요. 옵션은 엔드포인트가 consumer(from)로 쓰이는지, producer(to)로 쓰이는지, 둘 다인지에 따라 분류되기도 해요.

엔드포인트 설정은 대부분 엔드포인트 URI에 _path_와 query 파라미터로 바로 하는 경우가 많아요. Java에서 엔드포인트와 데이터 포맷을 _타입 세이프_하게 설정하려면 Endpoint DSL과 DataFormat DSL을 쓸 수도 있어요.

옵션을 설정할 때 좋은 습관은 Property Placeholders를 사용하는 거예요.

프로퍼티 플레이스홀더는 이런 장점이 있어요:

  • URL, 포트 번호, 민감한 정보 같은 설정을 하드코딩하는 걸 막아 줘요.

  • 설정을 코드 밖으로 분리할 수 있어요.

  • 코드가 더 유연해지고 재사용하기 좋아져요.

다음 두 섹션에서 모든 옵션을 나열해요. 먼저 컴포넌트, 그다음 엔드포인트 순서예요.

컴포넌트 옵션 (Component Options)

Google Mail 컴포넌트가 지원하는 옵션은 아래와 같아요.

Name Description Default Type
applicationName (common) Google 메일 애플리케이션 이름이에요. 예는 camel-google-mail/1.0이에요. String
clientId (common) 메일 애플리케이션의 클라이언트 ID예요. String
configuration (common) 공유 설정을 쓰려면 이걸 사용해요. GoogleMailConfiguration
delegate (common) 와이드 도메인 서비스 계정용 delegate예요. String
scopes (common) 캘린더 애플리케이션이 사용자 계정에 대해 갖게 될 권한 수준을 지정해요. 자세한 내용은 https://developers.google.com/identity/protocols/googlescopes를 참고하세요. 여러 스코프는 쉼표로 구분할 수 있어요. String
bridgeErrorHandler (consumer) consumer를 Camel 라우팅 에러 핸들러에 브리지할 수 있어요. 즉 Camel consumer가 들어오는 메시지를 집어 올리는 동안(가능하다면) 발생한 예외를 메시지처럼 처리해서 라우팅 에러 핸들러가 다루게 돼요. 중요: 서드파티 컴포넌트가 예외 발생을 Camel에 알려 줄 수 있을 때만 가능해요. 일부 컴포넌트는 이걸 내부에서만 처리하기 때문에 bridgeErrorHandler를 쓸 수 없어요. 다른 경우에는 이후 릴리스에서 Camel 컴포넌트가 서드파티 컴포넌트에 후킹할 수 있게 개선될 수도 있어요. 기본으로 consumer는 org.apache.camel.spi.ExceptionHandler를 써서 예외를 다루고, WARN이나 ERROR 레벨로 로그를 남긴 뒤 무시해요. false boolean
lazyStartProducer (producer) producer를 lazy(첫 메시지 시점)로 시작할지 여부예요. lazy 시작을 쓰면 producer가 시작 중 실패해서 라우트 시작이 실패하는 상황에서도 CamelContext와 라우트를 시작할 수 있고, 시작 실패를 Camel의 라우팅 에러 핸들러로 라우팅 중에 처리할 수 있어요. 다만 첫 메시지를 처리하는 시점에 producer를 만들고 시작하는 데 시간이 조금 걸려서 전체 처리 시간이 길어질 수 있다는 점은 유의하세요. false boolean
autowiredEnabled (advanced) 오토와이어링 사용 여부예요. 레지스트리에서 일치하는 타입의 인스턴스가 하나만 있는지 찾아서 컴포넌트에 자동으로 설정하는(옵션이 autowired로 표시돼 있어야 함) 자동 오토와이어링에 쓰입니다. JDBC 데이터 소스, JMS 커넥션 팩토리, AWS 클라이언트 등을 자동 설정할 때 유용해요. true boolean
clientFactory (advanced) 클라이언트를 만드는 팩토리로 GoogleCalendarClientFactory를 사용해요. 기본으로 BatchGoogleMailClientFactory를 사용해요. GoogleMailClientFactory
accessToken (security) OAuth 2 액세스 토큰이에요. 보통 한 시간 후에 만료되니 장기 사용에는 refreshToken을 쓰는 게 좋아요. String
clientSecret (security) 메일 애플리케이션의 클라이언트 시크릿이에요. String
refreshToken (security) OAuth 2 리프레시 토큰이에요. 이걸 쓰면 Google Mail 컴포넌트가 현재 토큰이 만료될 때마다 새 accessToken을 얻을 수 있어요. 애플리케이션이 오래 살아 있어야 한다면 필수예요. String
serviceAccountKey (security) 애플리케이션을 서비스 계정으로 인증할 때 쓰는 json 형식의 서비스 계정 키예요. base64: 접두어를 붙이면 base64를 받아들여요. String

엔드포인트 옵션 (Endpoint Options)

Google Mail 엔드포인트는 다음 URI 문법으로 설정해요:

google-mail:apiName/methodName

다음 _path_와 query 파라미터를 씁니다:

경로 파라미터 (Path Parameters)

Name Description Default Type
apiName (common)
필수 어떤 종류의 연산을 수행할지예요.

Enum values:

  • THREADS

  • MESSAGES

  • ATTACHMENTS

  • LABELS

  • HISTORY

  • DRAFTS

  • USERS

| | GoogleMailApiName | | methodName (common) |

필수 선택한 연산에 대해 사용할 하위 연산이에요.

Enum values:

  • attachments

  • create

  • delete

  • get

  • getProfile

  • gmailImport

  • insert

  • list

  • modify

  • patch

  • send

  • stop

  • trash

  • untrash

  • update

  • watch

| | String |

쿼리 파라미터 (Query Parameters)

Name Description Default Type
applicationName (common) Google 메일 애플리케이션 이름이에요. 예는 camel-google-mail/1.0이에요. String
clientId (common) 메일 애플리케이션의 클라이언트 ID예요. String
delegate (common) 와이드 도메인 서비스 계정용 delegate예요. String
inBody (common) exchange In Body로 전달할 파라미터 이름을 설정해요. String
scopes (common) 캘린더 애플리케이션이 사용자 계정에 대해 갖게 될 권한 수준을 지정해요. 자세한 내용은 https://developers.google.com/identity/protocols/googlescopes를 참고하세요. 여러 스코프는 쉼표로 구분할 수 있어요. String
sendEmptyMessageWhenIdle (consumer) polling consumer가 파일을 하나도 폴링하지 못했을 때, 이 옵션을 켜면 그 대신 빈 메시지(본문 없음)를 보내요. false boolean
bridgeErrorHandler (consumer (advanced)) consumer를 Camel 라우팅 에러 핸들러에 브리지할 수 있어요. 즉 Camel consumer가 들어오는 메시지를 집어 올리는 동안(가능하다면) 발생한 예외를 메시지처럼 처리해서 라우팅 에러 핸들러가 다루게 돼요. 중요: 서드파티 컴포넌트가 예외 발생을 Camel에 알려 줄 수 있을 때만 가능해요. 일부 컴포넌트는 이걸 내부에서만 처리하기 때문에 bridgeErrorHandler를 쓸 수 없어요. 다른 경우에는 이후 릴리스에서 Camel 컴포넌트가 서드파티 컴포넌트에 후킹할 수 있게 개선될 수도 있어요. 기본으로 consumer는 org.apache.camel.spi.ExceptionHandler를 써서 예외를 다루고, WARN이나 ERROR 레벨로 로그를 남긴 뒤 무시해요. false boolean
exceptionHandler (consumer (advanced)) consumer가 커스텀 ExceptionHandler를 쓰도록 해요. bridgeErrorHandler 옵션이 켜져 있으면 이 옵션은 사용되지 않는다는 점에 유의하세요. 기본으로 consumer는 예외를 직접 다루고, WARN이나 ERROR 레벨로 로그를 남긴 뒤 무시해요. ExceptionHandler
exchangePattern (consumer (advanced))
consumer가 exchange를 만들 때 설정할 exchange 패턴이에요.

Enum values:

  • InOnly

  • InOut

| | ExchangePattern | | pollStrategy (consumer (advanced)) | 커스텀 구현체를 제공해 poll 연산 중에 보통 발생하는 에러 처리를 제어할 수 있게 해 주는 pluggable org.apache.camel.PollingConsumerPollingStrategy예요. poll 연산은 Exchange가 만들어지고 Camel에서 라우팅되기 전에 일어나요. | | PollingConsumerPollStrategy | | lazyStartProducer (producer (advanced)) | producer를 lazy(첫 메시지 시점)로 시작할지 여부예요. lazy 시작을 쓰면 producer가 시작 중 실패해서 라우트 시작이 실패하는 상황에서도 CamelContext와 라우트를 시작할 수 있고, 시작 실패를 Camel의 라우팅 에러 핸들러로 라우팅 중에 처리할 수 있어요. 다만 첫 메시지를 처리하는 시점에 producer를 만들고 시작하는 데 시간이 조금 걸려서 전체 처리 시간이 길어질 수 있다는 점은 유의하세요. | false | boolean | | backoffErrorThreshold (scheduler) | backoffMultipler가 작동하기 전에 연속으로 몇 번의 에러 폴링(오류로 실패한 폴링)이 일어나야 하는지예요. | | int | | backoffIdleThreshold (scheduler) | backoffMultipler가 작동하기 전에 연속으로 몇 번의 idle 폴링이 일어나야 하는지예요. | | int | | backoffMultiplier (scheduler) | 연속으로 idle/에러가 여러 번 이어지면 예약 폴링 consumer가 backoff하도록 해요. multiplier는 다음 실제 시도가 다시 일어나기 전에 건너뛸 폴링 횟수예요. 이 옵션을 쓸 때는 backoffIdleThreshold와/또는 backoffErrorThreshold도 함께 설정해야 해요. | | int | | delay (scheduler) | 다음 폴링 전까지의 밀리초예요. | 500 | long | | greedy (scheduler) | greedy를 켜면 이전 실행에서 메시지를 1개 이상 폴링했을 때 ScheduledPollConsumer가 바로 다시 실행돼요. | false | boolean | | initialDelay (scheduler) | 첫 폴링이 시작되기 전의 밀리초예요. | 1000 | long | | repeatCount (scheduler) | 발동 횟수의 최대 한도를 지정해요. 1로 설정하면 스케줄러는 한 번만 발동하고, 5로 설정하면 다섯 번만 발동해요. 0이나 음수는 계속 발동한다는 뜻이에요. | 0 | long | | runLoggingLevel (scheduler) |

consumer는 폴링할 때 시작/완료 로그 한 줄을 남겨요. 이 옵션으로 그 로깅 레벨을 설정할 수 있어요.

Enum values:

  • TRACE

  • DEBUG

  • INFO

  • WARN

  • ERROR

  • OFF

| TRACE | LoggingLevel | | scheduledExecutorService (scheduler) | consumer가 사용할 커스텀/공유 스레드 풀을 설정할 수 있어요. 기본으로 각 consumer는 자기만의 단일 스레드 스레드 풀을 가져요. | | ScheduledExecutorService | | scheduler (scheduler) | camel-spring이나 camel-quartz 컴포넌트의 cron 스케줄러를 사용해요. 내장 스케줄러를 쓰려면 spring이나 quartz 값을 쓰세요. | none | Object | | schedulerProperties (scheduler) | 커스텀 스케줄러나 Quartz·Spring 기반 스케줄러를 사용할 때 추가 프로퍼티를 설정해요. 접두어 scheduler를 쓰는 다중 값 옵션이에요. | | Map | | startScheduler (scheduler) | 스케줄러를 자동으로 시작할지 여부예요. | true | boolean | | timeUnit (scheduler) |

initialDelay와 delay 옵션의 시간 단위예요.

Enum values:

  • NANOSECONDS

  • MICROSECONDS

  • MILLISECONDS

  • SECONDS

  • MINUTES

  • HOURS

  • DAYS

| MILLISECONDS | TimeUnit | | useFixedDelay (scheduler) | fixed delay를 쓸지 fixed rate를 쓸지 제어해요. 자세한 내용은 JDK의 ScheduledExecutorService를 참고하세요. | true | boolean | | accessToken (security) | OAuth 2 액세스 토큰이에요. 보통 한 시간 후에 만료되니 장기 사용에는 refreshToken을 쓰는 게 좋아요. | | String | | clientSecret (security) | 메일 애플리케이션의 클라이언트 시크릿이에요. | | String | | refreshToken (security) | OAuth 2 리프레시 토큰이에요. 이걸 쓰면 Google Mail 컴포넌트가 현재 토큰이 만료될 때마다 새 accessToken을 얻을 수 있어요. 애플리케이션이 오래 살아 있어야 한다면 필수예요. | | String | | serviceAccountKey (security) | 애플리케이션을 서비스 계정으로 인증할 때 쓰는 json 형식의 서비스 계정 키예요. base64: 접두어를 붙이면 base64를 받아들여요. | | String |

API 파라미터 (API Parameters, 7개 API)

Google Mail 엔드포인트는 API 기반 컴포넌트라서, 어떤 API 이름과 API 메서드를 쓰는지에 따라 추가 파라미터가 붙어요. API 이름과 API 메서드는 엔드포인트 URI에서 apiName/methodName 경로 파라미터로 들어가요:

google-mail:apiName/methodName

아래 표에 나열된 7개 API 이름이 있어요:

API Name Type Description
attachments Both messages 컬렉션의 attachments 컬렉션 메서드들이에요.
drafts Both messages 컬렉션의 drafts 컬렉션 메서드들이에요.
history Both messages 컬렉션의 history 컬렉션 메서드들이에요.
labels Both labels 컬렉션의 메서드들이에요.
messages Both messages 컬렉션의 메서드들이에요.
threads Both threads 컬렉션의 메서드들이에요.
users Both users 컬렉션의 메서드들이에요.

각 API는 이어지는 다음 섹션에서 문서화돼 있어요.

API: attachments

컨슈머와 프로듀서를 모두 지원해요

attachments API는 다음 문법으로 정의돼요:

google-mail:attachments/methodName?[parameters]

1개 메서드가 아래 표에 나열되어 있고, 이어서 각 메서드의 상세 문법을 보여 줘요. (API 메서드는 문법에서 이름 대신 쓸 수 있는 짧은 _별칭_을 가질 수 있어요)

Method Alias Description
get 지정한 메시지 첨부 파일을 가져와요.

Method get

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Messages.Attachments.Get get(String userId, String messageId, String id);

google-mail/get API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
id 첨부 파일(attachment)의 ID예요. String
messageId 첨부 파일이 들어 있는 메시지의 ID예요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

위 파라미터 외에도 google-mail API는 쿼리 파라미터(Query Parameters)를 모두 사용할 수 있어요.

파라미터는 엔드포인트 URI에 담거나 메시지 헤더로 동적으로 줄 수도 있어요. 메시지 헤더 이름은 CamelGoogleMail.parameter 형식이어야 해요. inBody 파라미터는 메시지 헤더를 덮어써요. 즉 엔드포인트 파라미터 inBody=myParameterNameHere가 CamelGoogleMail.myParameterNameHere 헤더를 이기는 거죠.

API: drafts

컨슈머와 프로듀서를 모두 지원해요

drafts API는 다음 문법으로 정의돼요:

google-mail:drafts/methodName?[parameters]

6개 메서드가 아래 표에 나열되어 있고, 이어서 각 메서드의 상세 문법을 보여 줘요. (API 메서드는 문법에서 이름 대신 쓸 수 있는 짧은 _별칭_을 가질 수 있어요)

Method Alias Description
create DRAFT 라벨을 붙여 새 임시 보관함(draft)을 만들어요.
delete 지정한 임시 보관함(draft)을 즉시 영구 삭제해요.
get 지정한 임시 보관함(draft)을 가져와요.
list 사용자의 메일함에 있는 임시 보관함(draft)을 나열해요.
send 지정한 기존 임시 보관함(draft)을 To, Cc, Bcc 헤더의 수신자들에게 보내요.
update 임시 보관함(draft)의 내용을 교체해요.

Method create

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Drafts.Create create(String userId, com.google.api.services.gmail.model.Draft content);

  • com.google.api.services.gmail.Gmail.Users.Drafts.Create create(String userId, com.google.api.services.gmail.model.Draft content, com.google.api.client.http.AbstractInputStreamContent mediaContent);

google-mail/create API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
content com.google.api.services.gmail.model.Draft 미디어 메타데이터이고, 없으면 null이에요. Draft
mediaContent 미디어 HTTP 콘텐츠예요. AbstractInputStreamContent
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method delete

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Drafts.Delete delete(String userId, String id);

google-mail/delete API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
id 삭제할 임시 보관함(draft)의 ID예요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method get

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Drafts.Get get(String userId, String id);

google-mail/get API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
format 임시 보관함(draft)을 돌려줄 형식이에요. String
id 가져올 임시 보관함(draft)의 ID예요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method list

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Drafts.List list(String userId);

google-mail/list API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
includeSpamTrash 결과에 SPAM과 TRASH의 임시 보관함(draft)도 포함해요. Boolean
maxResults 돌려줄 임시 보관함(draft)의 최대 개수예요. Long
pageToken 목록에서 특정 페이지의 결과를 가져올 페이지 토큰이에요. String
q 지정한 쿼리에 맞는 임시 보관함 메시지만 돌려줘요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method send

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Drafts.Send send(String userId, com.google.api.services.gmail.model.Draft content);

  • com.google.api.services.gmail.Gmail.Users.Drafts.Send send(String userId, com.google.api.services.gmail.model.Draft content, com.google.api.client.http.AbstractInputStreamContent mediaContent);

google-mail/send API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
content com.google.api.services.gmail.model.Draft 미디어 메타데이터이고, 없으면 null이에요. Draft
mediaContent 미디어 HTTP 콘텐츠예요. AbstractInputStreamContent
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method update

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Drafts.Update update(String userId, String id, com.google.api.services.gmail.model.Draft content);

  • com.google.api.services.gmail.Gmail.Users.Drafts.Update update(String userId, String id, com.google.api.services.gmail.model.Draft content, com.google.api.client.http.AbstractInputStreamContent mediaContent);

google-mail/update API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
content com.google.api.services.gmail.model.Draft 미디어 메타데이터이고, 없으면 null이에요. Draft
id
String
mediaContent 미디어 HTTP 콘텐츠예요. AbstractInputStreamContent
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

위 파라미터 외에도 google-mail API는 쿼리 파라미터(Query Parameters)를 모두 사용할 수 있어요.

파라미터는 엔드포인트 URI에 담거나 메시지 헤더로 동적으로 줄 수도 있어요. 메시지 헤더 이름은 CamelGoogleMail.parameter 형식이어야 해요. inBody 파라미터는 메시지 헤더를 덮어써요. 즉 엔드포인트 파라미터 inBody=myParameterNameHere가 CamelGoogleMail.myParameterNameHere 헤더를 이기는 거죠.

API: history

컨슈머와 프로듀서를 모두 지원해요

history API는 다음 문법으로 정의돼요:

google-mail:history/methodName?[parameters]

1개 메서드가 아래 표에 나열되어 있고, 이어서 각 메서드의 상세 문법을 보여 줘요. (API 메서드는 문법에서 이름 대신 쓸 수 있는 짧은 _별칭_을 가질 수 있어요)

Method Alias Description
list 주어진 메일함의 모든 변경 이력을 나열해요.

Method list

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.History.List list(String userId);

google-mail/list API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
historyTypes 함수가 돌려줄 이력(history) 유형이에요. List
labelId 해당 ID와 맞는 라벨이 붙은 메시지만 돌려줘요. String
maxResults 돌려줄 이력 기록의 최대 개수예요. Long
pageToken 목록에서 특정 페이지의 결과를 가져올 페이지 토큰이에요. String
startHistoryId BigInteger
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

위 파라미터 외에도 google-mail API는 쿼리 파라미터(Query Parameters)를 모두 사용할 수 있어요.

파라미터는 엔드포인트 URI에 담거나 메시지 헤더로 동적으로 줄 수도 있어요. 메시지 헤더 이름은 CamelGoogleMail.parameter 형식이어야 해요. inBody 파라미터는 메시지 헤더를 덮어써요. 즉 엔드포인트 파라미터 inBody=myParameterNameHere가 CamelGoogleMail.myParameterNameHere 헤더를 이기는 거죠.

API: labels

컨슈머와 프로듀서를 모두 지원해요

labels API는 다음 문법으로 정의돼요:

google-mail:labels/methodName?[parameters]

6개 메서드가 아래 표에 나열되어 있고, 이어서 각 메서드의 상세 문법을 보여 줘요. (API 메서드는 문법에서 이름 대신 쓸 수 있는 짧은 _별칭_을 가질 수 있어요)

Method Alias Description
create 새 라벨을 만들어요.
delete 지정한 라벨을 즉시 영구 삭제하고, 그 라벨이 적용된 모든 메시지와 스레드에서도 라벨을 제거해요.
get 지정한 라벨을 가져와요.
list 사용자의 메일함에 있는 모든 라벨을 나열해요.
patch 지정한 라벨을 부분 수정(patch)해요.
update 지정한 라벨을 갱신해요.

Method create

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Labels.Create create(String userId, com.google.api.services.gmail.model.Label content);

google-mail/create API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
content com.google.api.services.gmail.model.Label이에요. Label
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method delete

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Labels.Delete delete(String userId, String id);

google-mail/delete API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
id 삭제할 라벨의 ID예요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method get

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Labels.Get get(String userId, String id);

google-mail/get API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
id 가져올 라벨의 ID예요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method list

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Labels.List list(String userId);

google-mail/list API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method patch

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Labels.Patch patch(String userId, String id, com.google.api.services.gmail.model.Label content);

google-mail/patch API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
content com.google.api.services.gmail.model.Label이에요. Label
id 갱신할 라벨의 ID예요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method update

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Labels.Update update(String userId, String id, com.google.api.services.gmail.model.Label content);

google-mail/update API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
content com.google.api.services.gmail.model.Label이에요. Label
id 갱신할 라벨의 ID예요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

위 파라미터 외에도 google-mail API는 쿼리 파라미터(Query Parameters)를 모두 사용할 수 있어요.

파라미터는 엔드포인트 URI에 담거나 메시지 헤더로 동적으로 줄 수도 있어요. 메시지 헤더 이름은 CamelGoogleMail.parameter 형식이어야 해요. inBody 파라미터는 메시지 헤더를 덮어써요. 즉 엔드포인트 파라미터 inBody=myParameterNameHere가 CamelGoogleMail.myParameterNameHere 헤더를 이기는 거죠.

API: messages

컨슈머와 프로듀서를 모두 지원해요

messages API는 다음 문법으로 정의돼요:

google-mail:messages/methodName?[parameters]

12개 메서드가 아래 표에 나열되어 있고, 이어서 각 메서드의 상세 문법을 보여 줘요. (API 메서드는 문법에서 이름 대신 쓸 수 있는 짧은 _별칭_을 가질 수 있어요)

Method Alias Description
attachments Attachments 컬렉션에서 요청을 만들기 위한 접근자(accessor)예요.
batchDelete 메시지 ID로 여러 메시지를 삭제해요.
batchModify 지정한 메시지들의 라벨을 수정해요.
delete 지정한 메시지를 즉시 영구 삭제해요.
get 지정한 메시지를 가져와요.
gmailImport SMTP로 수신할 때와 비슷한 표준 이메일 전달 검사·분류를 거쳐, 이 사용자의 메일함에만 메시지를 가져와요(import).
insert IMAP APPEND와 비슷하게 대부분의 검사·분류를 우회해서, 이 사용자의 메일함에만 메시지를 직접 삽입해요.
list 사용자의 메일함에 있는 메시지를 나열해요.
modify 지정한 메시지의 라벨을 수정해요.
send 지정한 메시지를 To, Cc, Bcc 헤더의 수신자들에게 보내요.
trash 지정한 메시지를 휴지통으로 이동해요.
untrash 지정한 메시지를 휴지통에서 꺼내요.

Method attachments

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Messages.Attachments attachments();

google-mail/attachments API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type

Method batchDelete

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Messages.BatchDelete batchDelete(String userId, com.google.api.services.gmail.model.BatchDeleteMessagesRequest content);

google-mail/batchDelete API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
batchDeleteMessagesRequest com.google.api.services.gmail.model.BatchDeleteMessagesRequest예요. BatchDeleteMessagesRequest
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method batchModify

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Messages.BatchModify batchModify(String userId, com.google.api.services.gmail.model.BatchModifyMessagesRequest content);

google-mail/batchModify API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
batchModifyMessagesRequest com.google.api.services.gmail.model.BatchModifyMessagesRequest예요. BatchModifyMessagesRequest
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method delete

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Messages.Delete delete(String userId, String id);

google-mail/delete API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
id 삭제할 메시지의 ID예요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method get

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Messages.Get get(String userId, String id);

google-mail/get API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
format 메시지를 돌려줄 형식이에요. String
id 가져올 메시지의 ID예요. 이 ID는 보통 messages.list로 얻어요. 메시지를 삽입(messages.insert)하거나 가져오기(messages.import)할 때도 결과에 이 ID가 들어가요. String
metadataHeaders 값을 주고 format이 METADATA일 때, 지정한 헤더만 포함해요. List
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method gmailImport

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Messages.GmailImport gmailImport(String userId, com.google.api.services.gmail.model.Message content);

  • com.google.api.services.gmail.Gmail.Users.Messages.GmailImport gmailImport(String userId, com.google.api.services.gmail.model.Message content, com.google.api.client.http.AbstractInputStreamContent mediaContent);

google-mail/gmailImport API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
content com.google.api.services.gmail.model.Message 미디어 메타데이터이고, 없으면 null이에요. Message
deleted 이메일을 영구 삭제(휴지통이 아님)로 표시해서 Vault 관리자에게만 Google Vault에 보이게 해요. Boolean
internalDateSource Gmail이 매기는 메시지의 내부 날짜(internal date) 출처예요. String
mediaContent 미디어 HTTP 콘텐츠예요. AbstractInputStreamContent
neverMarkSpam Gmail 스팸 분류기 판정을 무시하고 이 이메일을 메일함에서 절대 SPAM으로 표시하지 않아요. Boolean
processForCalendar 이메일 속 캘린더 초대를 처리해서 추출된 일정을 이 사용자의 Google 캘린더에 추가해요. Boolean
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method insert

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Messages.Insert insert(String userId, com.google.api.services.gmail.model.Message content);

  • com.google.api.services.gmail.Gmail.Users.Messages.Insert insert(String userId, com.google.api.services.gmail.model.Message content, com.google.api.client.http.AbstractInputStreamContent mediaContent);

google-mail/insert API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
content com.google.api.services.gmail.model.Message 미디어 메타데이터이고, 없으면 null이에요. Message
deleted 이메일을 영구 삭제(휴지통이 아님)로 표시해서 Vault 관리자에게만 Google Vault에 보이게 해요. Boolean
internalDateSource Gmail이 매기는 메시지의 내부 날짜(internal date) 출처예요. String
mediaContent 미디어 HTTP 콘텐츠예요. AbstractInputStreamContent
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method list

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Messages.List list(String userId);

google-mail/list API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
includeSpamTrash 결과에 SPAM과 TRASH의 메시지도 포함해요. Boolean
labelIds 지정한 라벨 ID 전부와 맞는 라벨이 붙은 메시지만 돌려줘요. List
maxResults 돌려줄 메시지의 최대 개수예요. Long
pageToken 목록에서 특정 페이지의 결과를 가져올 페이지 토큰이에요. String
q 지정한 쿼리에 맞는 메시지만 돌려줘요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method modify

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Messages.Modify modify(String userId, String id, com.google.api.services.gmail.model.ModifyMessageRequest content);

google-mail/modify API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
id 수정할 메시지의 ID예요. String
modifyMessageRequest com.google.api.services.gmail.model.ModifyMessageRequest예요. ModifyMessageRequest
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method send

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Messages.Send send(String userId, com.google.api.services.gmail.model.Message content);

  • com.google.api.services.gmail.Gmail.Users.Messages.Send send(String userId, com.google.api.services.gmail.model.Message content, com.google.api.client.http.AbstractInputStreamContent mediaContent);

google-mail/send API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
content com.google.api.services.gmail.model.Message 미디어 메타데이터이고, 없으면 null이에요. Message
mediaContent 미디어 HTTP 콘텐츠예요. AbstractInputStreamContent
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method trash

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Messages.Trash trash(String userId, String id);

google-mail/trash API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
id 휴지통으로 보낼 메시지의 ID예요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method untrash

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Messages.Untrash untrash(String userId, String id);

google-mail/untrash API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
id 휴지통에서 꺼낼 메시지의 ID예요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

위 파라미터 외에도 google-mail API는 쿼리 파라미터(Query Parameters)를 모두 사용할 수 있어요.

파라미터는 엔드포인트 URI에 담거나 메시지 헤더로 동적으로 줄 수도 있어요. 메시지 헤더 이름은 CamelGoogleMail.parameter 형식이어야 해요. inBody 파라미터는 메시지 헤더를 덮어써요. 즉 엔드포인트 파라미터 inBody=myParameterNameHere가 CamelGoogleMail.myParameterNameHere 헤더를 이기는 거죠.

API: threads

컨슈머와 프로듀서를 모두 지원해요

threads API는 다음 문법으로 정의돼요:

google-mail:threads/methodName?[parameters]

6개 메서드가 아래 표에 나열되어 있고, 이어서 각 메서드의 상세 문법을 보여 줘요. (API 메서드는 문법에서 이름 대신 쓸 수 있는 짧은 _별칭_을 가질 수 있어요)

Method Alias Description
delete 지정한 스레드(thread)를 즉시 영구 삭제해요.
get 지정한 스레드(thread)를 가져와요.
list 사용자의 메일함에 있는 스레드(thread)를 나열해요.
modify 스레드(thread)에 적용된 라벨을 수정해요.
trash 지정한 스레드(thread)를 휴지통으로 이동해요.
untrash 지정한 스레드(thread)를 휴지통에서 꺼내요.

Method delete

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Threads.Delete delete(String userId, String id);

google-mail/delete API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
id 삭제할 스레드(thread)의 ID예요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method get

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Threads.Get get(String userId, String id);

google-mail/get API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
format 메시지들을 돌려줄 형식이에요. String
id 가져올 스레드(thread)의 ID예요. String
metadataHeaders 값을 주고 format이 METADATA일 때, 지정한 헤더만 포함해요. List
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method list

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Threads.List list(String userId);

google-mail/list API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
includeSpamTrash 결과에 SPAM과 TRASH의 스레드(thread)도 포함해요. Boolean
labelIds 지정한 라벨 ID 전부와 맞는 라벨이 붙은 스레드만 돌려줘요. List
maxResults 돌려줄 스레드(thread)의 최대 개수예요. Long
pageToken 목록에서 특정 페이지의 결과를 가져올 페이지 토큰이에요. String
q 지정한 쿼리에 맞는 스레드(thread)만 돌려줘요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method modify

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Threads.Modify modify(String userId, String id, com.google.api.services.gmail.model.ModifyThreadRequest content);

google-mail/modify API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
content com.google.api.services.gmail.model.ModifyThreadRequest예요. ModifyThreadRequest
id 수정할 스레드(thread)의 ID예요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method trash

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Threads.Trash trash(String userId, String id);

google-mail/trash API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
id 휴지통으로 보낼 스레드(thread)의 ID예요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method untrash

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Threads.Untrash untrash(String userId, String id);

google-mail/untrash API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
id 휴지통에서 꺼낼 스레드(thread)의 ID예요. String
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

위 파라미터 외에도 google-mail API는 쿼리 파라미터(Query Parameters)를 모두 사용할 수 있어요.

파라미터는 엔드포인트 URI에 담거나 메시지 헤더로 동적으로 줄 수도 있어요. 메시지 헤더 이름은 CamelGoogleMail.parameter 형식이어야 해요. inBody 파라미터는 메시지 헤더를 덮어써요. 즉 엔드포인트 파라미터 inBody=myParameterNameHere가 CamelGoogleMail.myParameterNameHere 헤더를 이기는 거죠.

API: users

컨슈머와 프로듀서를 모두 지원해요

users API는 다음 문법으로 정의돼요:

google-mail:users/methodName?[parameters]

3개 메서드가 아래 표에 나열되어 있고, 이어서 각 메서드의 상세 문법을 보여 줘요. (API 메서드는 문법에서 이름 대신 쓸 수 있는 짧은 _별칭_을 가질 수 있어요)

Method Alias Description
getProfile 현재 사용자의 Gmail 프로필을 가져와요.
stop 주어진 사용자 메일함에 대한 푸시 알림 수신을 멈춰요.
watch 주어진 사용자 메일함에 푸시 알림 감시(watch)를 설정하거나 갱신해요.

Method getProfile

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.GetProfile getProfile(String userId);

google-mail/getProfile API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method stop

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Stop stop(String userId);

google-mail/stop API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

Method watch

시그니처(Signatures):

  • com.google.api.services.gmail.Gmail.Users.Watch watch(String userId, com.google.api.services.gmail.model.WatchRequest content);

google-mail/watch API 메서드는 아래 표에 나열된 파라미터를 사용해요:

Parameter Description Type
content com.google.api.services.gmail.model.WatchRequest예요. WatchRequest
userId 사용자의 이메일 주소예요. 인증된 사용자를 가리킬 때는 me라는 특별한 값을 쓸 수 있어요. default: me String

위 파라미터 외에도 google-mail API는 쿼리 파라미터(Query Parameters)를 모두 사용할 수 있어요.

파라미터는 엔드포인트 URI에 담거나 메시지 헤더로 동적으로 줄 수도 있어요. 메시지 헤더 이름은 CamelGoogleMail.parameter 형식이어야 해요. inBody 파라미터는 메시지 헤더를 덮어써요. 즉 엔드포인트 파라미터 inBody=myParameterNameHere가 CamelGoogleMail.myParameterNameHere 헤더를 이기는 거죠.

참고 API 기반 컴포넌트라서 엔드포인트 옵션 외에도 호출별 파라미터를 Camel- 접두어를 붙인 exchange 헤더로 넘길 수 있어요. 라우트가 신뢰할 수 없는 producer의 메시지를 받는다면, 메시지가 이 컴포넌트에 닿기 전에 신뢰 경계(trust boundary)에서 이 내부 헤더들을 걷어내세요. 예컨대 removeHeaders("Camel*")을 쓰면 발신자가 API 호출을 덮어쓰지 못하게 돼요. 자세한 내용은 the Camel security model을 참고하세요.

데이터 타입 트랜스포머: update-message-labels (Data Type Transformer)

google-mail:update-message-labels 데이터 타입 트랜스포머는 exchange 변수로 ModifyMessageRequest를 만들면서, 라벨 이름을 Gmail 라벨 ID로 자동으로 변환해 줘요.

labels/list API를 손으로 직접 호출하지 않고도 Gmail 메시지 라벨을 수정할 수 있어서 유용해요(분류, 보관, 별표, 이동 등).

exchange 변수 (Exchange Variables)

Variable Type Description
addLabels String (comma-separated) or List<String> 메시지에 추가할 라벨 이름들이에요.
removeLabels String (comma-separated) or List<String> 메시지에서 제거할 라벨 이름들이에요.

두 변수 중 최소 하나는 반드시 설정해야 해요.

시스템 라벨(INBOX, UNREAD, STARRED, SPAM, TRASH, IMPORTANT 등)과 사용자 정의 커스텀 라벨 모두 Gmail labels/list API를 통해 변환돼요.

예시 (Examples)

from("google-mail-stream:0")
    .setVariable("addLabels", constant("Work"))
    .setVariable("removeLabels", constant("INBOX,UNREAD"))
    .transformDataType(new DataType("google-mail:update-message-labels"))
    .to("google-mail:messages/modify");
- route:
    from:
      uri: "google-mail-stream:0"
      steps:
        - setVariable:
            name: addLabels
            constant: "Work"
        - setVariable:
            name: removeLabels
            constant: "INBOX,UNREAD"
        - transformDataType:
            toType: "google-mail:update-message-labels"
        - to:
            uri: "google-mail:messages/modify"
<route>
    <from uri="google-mail-stream:0"/>
    <setVariable name="addLabels">
        <constant>Work</constant>
    </setVariable>
    <setVariable name="removeLabels">
        <constant>INBOX,UNREAD</constant>
    </setVariable>
    <transformDataType toType="google-mail:update-message-labels"/>
    <to uri="google-mail:messages/modify"/>
</route>

데이터 타입 트랜스포머: draft (Data Type Transformer)

google-mail:draft 트랜스포머는 exchange의 메일 헤더를 이용해 String 본문을 Gmail Draft로 바꿔 줘요.

google-mail-stream과 함께 쓰도록 만들어졌는데, 이 컴포넌트는 메시지를 소비할 때 threadId, messageId, from, to, cc, bcc, subject 같은 헤더를 자동으로 설정해 줘요. 이 헤더들을 직접 설정해서 처음부터 새 임시 보관함(draft)을 만들 수도 있어요.

헤더 (Headers)

트랜스포머는 다음 헤더들을 읽어요.

Header Type Description
CamelGoogleMailStreamThreadId String 대화(conversation)의 스레드 ID예요. (선택 사항, 답장에 사용)
CamelGoogleMailStreamMessageId String 답장할 메시지의 ID예요. (선택 사항, In-Reply-To와 References 헤더를 설정)
CamelGoogleMailStreamFrom String 보내는 사람 주소예요. (선택 사항)
CamelGoogleMailStreamTo String 받는 사람 주소예요. (선택 사항)
CamelGoogleMailStreamCc String 참조(CC) 주소예요. (선택 사항)
CamelGoogleMailStreamBcc String 숨은 참조(BCC) 주소예요. (선택 사항)
CamelGoogleMailStreamSubject String 이메일 제목이에요. (선택 사항)

모든 헤더는 선택 사항이에요.

메시지 본문 (Message Body)

메시지 본문은 이메일 내용을 담은 String이에요(plain text 또는 HTML).

콘텐츠 타입은 기본으로 text/plain; charset=UTF-8이에요. HTML을 쓰려면 Exchange.CONTENT_TYPE을 text/html; charset=UTF-8로 설정하세요.

트랜스포머는 이런 일을 해요:

  • RFC 2822 MIME 메시지를 만들고 Gmail API가 요구하는 대로 Base64 URL-safe로 인코딩해요

  • messageId가 있으면 In-Reply-To와 References 헤더를 설정해요

  • threadId가 있으면 임시 보관함(draft)을 올바른 스레드와 연결해요

예시 (Examples)

// Create a draft reply from a received message
from("google-mail-stream:0")
    .setBody(constant("Thank you for your message. I will respond soon."))
    .transformDataType(new DataType("google-mail:draft"))
    .to("google-mail:drafts/create?inBody=content");

// Create a new draft (no threading)
from("direct:newDraft")
    .setBody(constant("This is a new draft message"))
    .setHeader("CamelGoogleMailStreamFrom", constant("sender@example.com"))
    .setHeader("CamelGoogleMailStreamTo", constant("recipient@example.com"))
    .setHeader("CamelGoogleMailStreamSubject", constant("New Draft"))
    .transformDataType(new DataType("google-mail:draft"))
    .to("google-mail:drafts/create?inBody=content");
# Create a draft reply from a received message
- route:
    from:
      uri: "google-mail-stream:0"
      steps:
        - setBody:
            constant: "Thank you for your message. I will respond soon."
        - transformDataType:
            toType: "google-mail:draft"
        - to:
            uri: "google-mail:drafts/create"
            parameters:
              inBody: content

# Create a new draft (no threading)
- route:
    from:
      uri: "direct:newDraft"
      steps:
        - setBody:
            constant: "This is a new draft message"
        - setHeader:
            name: CamelGoogleMailStreamFrom
            constant: "sender@example.com"
        - setHeader:
            name: CamelGoogleMailStreamTo
            constant: "recipient@example.com"
        - setHeader:
            name: CamelGoogleMailStreamSubject
            constant: "New Draft"
        - transformDataType:
            toType: "google-mail:draft"
        - to:
            uri: "google-mail:drafts/create"
            parameters:
              inBody: content
<!-- Create a draft reply from a received message -->
<route>
    <from uri="google-mail-stream:0"/>
    <setBody>
        <constant>Thank you for your message. I will respond soon.</constant>
    </setBody>
    <transformDataType toType="google-mail:draft"/>
    <to uri="google-mail:drafts/create?inBody=content"/>
</route>

<!-- Create a new draft (no threading) -->
<route>
    <from uri="direct:newDraft"/>
    <setBody>
        <constant>This is a new draft message</constant>
    </setBody>
    <setHeader name="CamelGoogleMailStreamFrom">
        <constant>sender@example.com</constant>
    </setHeader>
    <setHeader name="CamelGoogleMailStreamTo">
        <constant>recipient@example.com</constant>
    </setHeader>
    <setHeader name="CamelGoogleMailStreamSubject">
        <constant>New Draft</constant>
    </setHeader>
    <transformDataType toType="google-mail:draft"/>
    <to uri="google-mail:drafts/create?inBody=content"/>
</route>

더 알아보기 (Learn more)

엔드포인트와 옵션에 대해 더 알고 싶으면 다음 API 문서를 참고하세요: https://developers.google.com/gmail/api/v1/reference/