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