회사메일이 뭔가 맥용 메일 클라이언트랑 호환이 잘 안되는지 메일 푸쉬가 잘 안되어서 크롬플러그인으로 만들었습니다. 지메일용 unread 체크 표시해주는 플러그인이 있어서 거기서 영감을 받아 만들었습니다. 이게 근데 Node.js용 서버가 있어야 합니다-_- 크롬 익스텐션에서 뭔가 소켓통신이 될 줄 알았는데, 잘 안되더라구요.
그래서 chorme-extension -> Node.js서버로 읽지 않은 메일이 있는지 확인 요청 -> Node.js가 imap서버에 연결하여 읽지 않은 메일을 가져오기 방식으로 구현했습니다. 그리고 Socket.io를 쓴 이유가 커넥션을 계속 맺고 있으려고 그렇게 했는데, 최초 imap서버에 로그인하는데 오래걸려서 이미 커넥션을 맺고 있으면 읽지않은 메일 가져오는 서치는 빠르게 되더라구요. 그래서 그렇게 했는데... 음… 만들다보니 이게 최선이였…..
Node.js에서는 Socket.io를 이용해 크롬 익스텐션과 통신을 합니다.
imap서버를 지원하는 다음메일, 네이트메일, 네이버메일은 잘 되네요. 지메일도 잘 되는데, 신뢰하지 않은 애플리케이션 옵션을 꺼야지 되네요.
1. Socket.io 프로토콜 구조
client -> server
login(id, pw, imap_server, imap_port, imap_tls)
로그인 요청. IMAP서버 연결정보를 전달해서 줌. 서버는 IMAP서버에 연결.
unseen()
읽지 않은 메일 아이디 목록 요청.
mail_info(mailId)
메일아이디로 메일정보 요청.
server -> client
connect()
클라이언트가 연결되면 전송.
login_success()
로그인 요청올 때 IMAP서버에 연결 후 이상이 없으면 전송.
unseen_result()
unseen요청이 올 때 unseen목록을 전송.
mail_info_result()
mail_info요청이 올 때 메일의 제목 및 보낸 사람 정보 전송.
server_error()
서버에서 IMAP서버에서 끊어지거나 예외 에러가 발생한 경우 전송.
대충 이렇습니다. 서버 에러가 나면 disconnect날려서 끊어버리면 클라가 다시 또 재연결을 시도합니다. 이런 식으로 좀비적으로 계속 붙어서 서버가 살아낼 때까지 연결합니다-_-
이제 실행법은 아래와 같습니다.
2. 로컬 서버 실행
서버 소스주소입니다.
RSA키키 만들고 실행하면 서버가 실행됩니다.
openssl genrsa -out rsa_1024_priv 1024
openssl ras -pubout -in rsa_1024_priv -out rsa_1024_pub
node app.js
3. 크롬확장프로그램 설치
크롬 확장프로그램 소스주소입니다.
위에서 만든 RSA키의 rsa_1024_pub키를 클론받은 소스 경로에 복사합니다.
크롬 실행 -> 설정 -> 확장프로그램 -> 개발자모드 체크 -> 압축해제된 확장프로그램 로드 후 소스 받은 경로 선택 하면 자동으로 설치가 됩니다.
4. 옵션 설정
오른쪽 상단에 표시된 크롬확장프로그램 아이콘에 오른쪽 버튼 클릭 후 옵션 선택하면 옵션이 나옵니다.
IMAP Server셋팅 대로 그대로 쓰시면 되고, 마지막 Enter WebMail Url은 크롬확장프로그램 클릭 시 이동하는 URL을 쓰면 됩니다.
저장 누르면 제대로 작동할 것입니다.
부록
Heroku서버에 올린 것과 연동된 플러그인을 크롬 웹스토어에 올렸습니다. 로컬서버 안 띄우고 제가 올린 서버와 연동되서 하는 것이긴 한데, 서버가 언제 죽을지는 모르니 참고하세요-_-