[TIL] 25.01.11 SAT

GDORI·2025년 1월 11일
0

TIL

목록 보기
159/184
post-thumbnail

IMAP

IMAP은 인터넷 메시지 액세스 프로토콜 약자로 메일 서버에서 메세지를 읽어오는 프로토콜이다. IMAP은 다중 로그인을 지원하여 여러 디바이스에서 서버에 동시 접근할 수 있고 메일을 확인할 수 있다.

Node.js에서 사용하기 위한 패키기

npm install imap mailparser

imap 프로토콜을 사용하고 메일 내용을 편하게 읽기 위하여 mailparser 도 사용한다.

연결 설정 및 메일 가져오기

import Imap from 'imap';
import { simpleParser } from 'mailparser';

// IMAP 서버 연결 설정
const imap = new Imap({
  user: config.auth.email,          // 이메일 주소
  password: config.auth.password,   // 이메일 비밀번호
  host: config.host.gmail,          // IMAP 서버 호스트
  port: config.port.gmail,          // IMAP 포트
  tls: true,                        // 보안 연결 사용
  tlsOptions: {
    rejectUnauthorized: false       // 자기 서명된 인증서 허용
  }
});

// 이메일을 가져오는 함수
function openInbox(cb) {
  imap.openBox('INBOX', true, cb);  // 'INBOX'는 기본 받은 편지함
}

// 이메일 읽기
imap.once('ready', function() {
  openInbox(function(err, box) {
    if (err) throw err;
    const fetch = imap.seq.fetch('1:10', {  // '1:10'은 첫 10개의 이메일을 가져옴
      bodies: 'HEADER.FIELDS (FROM TO SUBJECT DATE)',  // 필요한 헤더 필드만 가져옴
      struct: true
    });

    fetch.on('message', function(msg, seqno) {
      console.log('Message #%d', seqno);
      const prefix = '(#' + seqno + ') ';

      msg.on('body', function(stream, info) {
        simpleParser(stream, (err, parsed) => {
          if (err) throw err;
          console.log('From:', parsed.from.text);
          console.log('Subject:', parsed.subject);
          console.log('Date:', parsed.date);
          console.log('Text:', parsed.text);
        });
      });

      msg.once('end', function() {
        console.log(prefix + 'Finished');
      });
    });

    fetch.once('end', function() {
      console.log('Done fetching all messages!');
      imap.end();  // 연결 종료
    });
  });
});

// IMAP 서버에 연결
imap.once('error', function(err) {
  console.log(err);
});

imap.once('end', function() {
  console.log('Connection ended');
});

imap.connect();  // IMAP 서버에 연결

profile
하루 최소 1시간이라도 공부하자..

0개의 댓글

관련 채용 정보