2008-10-29

메일박스 이동...

PHP에서 메일을 IMAP의 다른 메일박스로 이동을 위해서 imap_mail_move() 함수를 이용합니다. 그리 어려워 보이지 않습니다. 그러나, 실제 이 함수를 사용해보면 메일이 다른 메일박스에 옮겨진 것을 확인할 수 있으나, 원래 메일박스에도 그대로 남아있는것을 보게 됩니다.

어찌된 영문인지 연구를 해보니 원래 메일박스에 그대로 남겨진 메일은 Delete 플래그가 설정이 된 채로 남겨진 것입니다. 이를 알아내기 위해서 이틀이나 소요했습니다. 이것을 확실하게 없애기 위해서는 imap_expunge() 함수를 호출하여 Delete 플래그가 설정된 메일을 삭제해주어야만 합니다.

다른 내용이긴 하지만, IMAP을 다룰때 또 한가지 주의할 점은 메일박스이름은 반드시 UTF-7 로 변환하고서 이용해야 합니다.

2008-10-10

imap_open 실행시 느리게 연결되는 현상 해결

대부분의 데몬에 원격에서 연결하는 것은 상당한 부하와 시간을 소비하게 됩니다. DB 의 경우에도 보통 Connection Pool 을 만들어서 커넥션 시간을 줄이고 있습니다.

지 금 만들고 있는 웹메일에서 IMAP 서버에 접근할때에도 같은 문제가 발생하고 있습니다. 한번 연결할때마다 약 2초의 시간이 걸립니다. 그래서 페이지를 이동하거나, 메일 내용을 보려고 할때마다 2초 이상의 시간을 기다려야만 했습니다. PHP에서 개발하고 있어서 다른 페이지에서 IMAP 의 연결을 유지할 수 있는 방법이 없었습니다. SESSION 변수를 이용하면 될 듯 하였으나, 테스트 실패했습니다.혹시나 하고 계속 찾아보았지만 PHP에서 해결할 수 있는 방법은 없었습니다.

그렇지만, 방법이 아주 없으면 글을 적지도 않았겠지요. IMAP 연결을 유지하려면 IMAP Proxy 를 사용하면 됩니다. 데비안 리눅스의 경우, apt-get install imapproxy 라고 입력하면 바로 설치되어 실행까지 됩니다. 기본적으로 로컬에 IMAP 이 있다고 가정하고 있으며, 1143 포트를 열고 있습니다. 개발자는 imap_open 함수를 사용할때 localhost:1143 으로 접근하면 됩니다. PHP 뿐만 아니라 다른 환경에서도 적용할 수 있어서 괜찮은 방법인 것 같습니다.

이렇게 구현을 하고 보니, 페이지 이동시 2~3 초 걸리던 것이, 거의 즉시 화면이 전환되었습니다.
상용 웹메일에서는 이것을 어떻게 해결하고 있는지 궁금하군요.