Gmail watch 사용해서 Pub/Sub 연동하기 node.js
현재 진행 중인 서버 프로젝트에서 새로운 메일 수신을 감지하기 위한 모니터링 시스템을 구성하려고 한다.
gmail의 watch를 사용하면 메일함의 변경사항을 실시간으로 감지할 수 있다.
감지된 이메일은 google cloud pub/sub 토픽으로 전송되고 서버에서 알림을 받을 수 있다!
전혀 복잡할게 없는 구성이라 개발은 어렵지 않을 것으로 예상했다.
역시 예상은 실전과 다르고요
유저 인증 요청은 쉽게 할 수 있는편!
구글 로그인과 거~~~~의 똑같다! 토큰들만 받으면 되니까여~~~
하지만 항상 권한 설정에서 시간을 좀 잡아먹었다
우선 gmail watch 권한부터!
gmail-api-push@system.gserviceaccount.com
이 메일을 추가해야되는데 어디서 하는지 한참 찾아다님..ㅎㅎ
구성원(principal)로 추가를 하는 것이였음!
오늘도 하나 배웟다✌️이런건 처음이 제일 어려운 것 같다
그리고 pub/sub IAM권한!!!!!!
그리고 google cloud console은 되도록 영어로 하시는 걸 추천드립니다!
한글로 라이트라고 되어있길래... write인줄알고 도대체 왜 안되나!!!
계속 추가하고 빼고...쓸모없는 짓함
Pub/Sub과 Pub/Sub lite는 다르다고 합니다
이렇게 해야합니다..........
휴 드디어 권한 설정 끝!!!
메일을 보내보자~!~!~!~!~
나의 경우에는 새 메일을 오는 경우에만 알람을 보낼것!
하지만 그런 기능은 없음🥹
이메일 히스토리 불러와서 새메일만 추적하는 로직 짜야함~~~~~
코드는 공식문서가 너무 잘되어있어서! 거기서 참고하면 잘 됨!!!
//gmail watch
const gmail = google.gmail({version: 'v1', auth: oauth2Client});
const watch = await gmail.users.watch({
userId: 'me',
requestBody: {
topicName: `projects/${process.env.PROJECT_ID}/topics/${process.env.TOPIC_NAME}`
},
});
// PubSub 코드, 공식문서와 약간 다름
export async function quickstart(
projectId = PROJECT_ID,
topicNameOrId = TOPIC_NAME,
subscriptionName = SUBSCRIPTION_NAME
) {
const pubsub = new PubSub({
projectId,
credentials: {
client_email: serviceAccount.client_email,
private_key: serviceAccount.private_key,
}
});
let topic = pubsub.topic(topicNameOrId);
const [topicExists] = await topic.exists();
let subscription = pubsub.subscription(subscriptionName);
if (!topicExists) { //토픽이 없는 경우 새로 생성
const [newTopic] = await pubsub.createTopic(topicNameOrId);
topic = newTopic;
[subscription] = await topic.createSubscription(subscriptionName);
}
// Receive callbacks for new messages on the subscription
subscription.on('message', message => {
console.log('Received message:', message.data.toString());
});
// Receive callbacks for errors on the subscription
subscription.on('error', error => {
console.error('Received error:', error);
process.exit(1);
});
// Send a message to the topic
topic.publishMessage({ data: Buffer.from('Test message!') });
}
혹~~시라도 제 전체 코드가 궁금하신 분들은 깃헙 참고해주시면 됩니다
https://github.com/hjleee93/MelTalk
GitHub - hjleee93/MelTalk: gmail kakaotalk 연결
gmail kakaotalk 연결 . Contribute to hjleee93/MelTalk development by creating an account on GitHub.
github.com
gmail pub/sub 설정 공식문서
https://developers.google.com/gmail/api/guides/push?hl=ko
푸시 알림 | Gmail | Google for Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 푸시 알림 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 개요 Gmail API는 Gmail 편지함의
developers.google.com
pub/sub node.js 시작문서
https://cloud.google.com/pubsub/docs/reference/libraries#client-libraries-install-nodejs
Pub/Sub client libraries | Pub/Sub Documentation | Google Cloud
Start writing code for Pub/Sub in C++, C#, Go, Java, Node.js, PHP, Python, Ruby.
cloud.google.com
'Node.js' 카테고리의 다른 글
node.js, express 초기 개발 환경설정 (0) | 2025.02.04 |
---|