hMailServer와 ColdFusion을 이용한 웹메일 서비스 만들기hMailServer와 ColdFusion을 이용한 웹메일 서비스 만들기

Posted at 2010. 10. 5. 08:46 | Posted in Server
반응형

hMailServer는 Microsoft의 Exchange와 같은 Windows용 메일서버로서 강력한 기능과 성능을 자랑하면서 무료로 쓸 수 있는 메일 서버입니다. 메일서비스가 왠만한 포털에 가입만 하면 수십GB씩 공간을 주면서 꽁짜로 쓰는 시대에 무슨 케케묶은 메일서비스 이야기냐 하시겠지만..

기업등에서 자사의 도메인으로 메일서비스를 하려는 경우 H/W 서버장비와 Windows 등의 OS등을 구매하여 비싼 메일 솔루션을 사야하는 점을 고려해보면 메일서비스란것이 만만한 작업이 아님을 아마 아시는 분들은 아실겁니다. hMailServer의 경우 국내에서는 많이 쓰이는지 확인불가입니다만, 네이버 등에서 검색해보면 단순소개 블로그글들은 종종보이는 듯 하니 저 말고는 아는 분들은 아실거라 생각합니다.

hMailServer는 ClamWin(Linux진영의 ClamAV의 Windows버전)과 다양한 필터링옵션을 제공해 보안적인 면도 고려하고 있고, 특히 설치 및 계정생성, 계정할당 등의 복잡한 메일설정을 쉽게 할 수 있으며 다중도메인도 지원하여 하나의 서버에서 여러 도메인으로 서비스 할 수 있습니다. 특히 사용자계정을 Active Directory와 통합하거나, 일시적으로 사용금지하거나 할 수 있습니다. 무엇보다 한국어 번역파일도 제공하므로 관리가 매우 쉽습니다. 더욱이 MSSQL, MySQL, PostgreSQL과 같은 데이터베이스를 기본적으로 지원하므로 대용량 이메일 서비스에서도 대응할 수 있습니다. hMailServer의 설치 및 기본적인 운영상의 정보는 다음의 링크에서 얻을 수 있습니다.(http://www.jopenbusiness.com/mediawiki/index.php/HMail_Server_4.4.1) 아울러 DNS설정, MX레코드설정 등은 본 글과는 무관하므로 자세한 설명은 차후에 하기로 하겠씁니다.

다만, 이런 설치형 메일서버의 문제점(?)이 웹에서 서비스할 경우 사용자가 가입후 자동으로 메일계정을 설정하고 바로 이메일을 활성화하여 서비스를 할 때 구축이 일반 웹개발언어로서는 다소 복잡하다는 것이 있습니다. 즉, 메일서버자체에서 다양한 API를 지원해 주지 못할 경우 웹에서 컨트롤하기 어렵다는 것이죠. 그래서 대부분의 메일서버 엔진이 Java로 구현된 이유가 아닐까 생각합니다.

다행히도 hMailServer는 Microsoft의 COM API를 지원하므로 ASP등에서 직접 VBScript를 통해 서버 API를 호출할 수 있습니다만, ASP란 언어가 Windows계열에서만 구동된다는 점은 다소 아쉬운 부분입니다. 더욱이 COM자체에 대한 연결 Component를 따로 만들어야 하는 것도 그렇고요. (이런 방식으로 hMailServer의 웹메일 솔루션을 만들어 판매하는 곳도 있더군요. 참조: 웹짱닷넷) hMailServer 자체의 COM API설명서는 다음의 링크에서 참조할 수 있습니다.(http://www.hmailserver.com/documentation/latest/?page=com_objects)

실제로 hMailServer를 설치하면 PHP로 된 웹기반 관리자 어플리케이션이 같이 설치됩니다. (단순 소스만 제공) 이 소스를 이용해서 IIS에 PHP모듈을 설치해서 서비스할 수 있겠지만 일단 PHP의 소스가 복잡해서 전 보지는 않았습니다.ㅎㅎㅎ

자.. 그래서 전 ColdFusion으로 해보려고 합니다. 왜냐? 쉽고 간결하고 강력하니까.. 더욱이 <cfmail>이나 <cfpop> 등의 메일관련 태그 몇줄로 구글의 G지메일과 같은 이메일 서비스를 바로 만들 수 있으니까요. 좀더 사용자를 고려해 보면 구글처럼 doc, ppt, xls, pdf 문서 등을 html로 바로 보여주거나, 첨부파일을 zip파일로 압축해서 다운로드되게 하거나, flex를 이용하여 대용량첨부를 가능하게하거나 하는 방법은 이미 ColdFusion에서는 제 블로그 글에서도 누누히 쉬운 작업임을 알려드린바 있기에 메일서버만 웹기반으로 컨트롤 할 수 있다면 문제는 간단해 지겠죠?

ColdFusion에서는 CreateObject()라는 함수를 제공합니다. 이 함수를 이용해서 COM, CORBA, JAVA, .NET 등의 오브젝트를 가져다 쓸 수 있습니다. 문법도 간단해서 쓰기도 편하죠. 이 함수를 이용해서 hMailServer를 컨트롤 하려고 했는데 의외로 간단하게 성공해서 솔직히 좀 김이 샜습니다. ㅎㅎㅎㅎ

hMailServer에서 제공하는 COM API의 VB예제와 같이 비슷한 문법으로 간단하게 사용자 계정을 추가하고 삭제하는 CFML 스크립트를 짜보면 다음과 같습니다.

소스코드 다운로드 :  

사용자의 추가(Add Account)

01 <!---유니코드 환경설정 --->
02 <cfprocessingdirective pageencoding="utf-8" />
03   
04 <cfscript>
05     obApp = CreateObject("com","hMailServer.Application");
06     obApp.Authenticate("Administrator","설치할때 지정한 hMailServer의 관리자 암호");
07     obDomain = obApp.Domains.ItemByName("hMailServer에서 지정한 도메인");
08   
09     obAccount = obDomain.Accounts.Add();
10     obAccount.Address = "sample@sample.com"; //추가하고자 하는 이메일주소
11     obAccount.Password = "samplepassword"; //이메일주소의 패스워드
12     obAccount.Active = True; //바로 활성화할것인지요?
13     obAccount.MaxSize = 500; //메일함용량(POP3/IMAP)의 지정
14     obAccount.Save();
15 </cfscript>

 

사용자의 삭제(Delete Account)

01 <!---유니코드 환경설정 --->
02 <cfprocessingdirective pageencoding="utf-8" />
03   
04 <cfscript>
05     obApp = CreateObject("com","hMailServer.Application");
06     obApp.Authenticate("Administrator","설치할때 지정한 hMailServer의 관리자 암호");
07     obDomain = obApp.Domains.ItemByName("hMailServer에서 지정한 도메인");
08   
09     obAccount = obDomain.Accounts.ItemByAddress("sample@sample.com"); //삭제하고자하는 메일계정
10     obDomain.Accounts.DeleteByDBID(obAccount.ID);
11 </cfscript>

 

위 스크립트를 hMailServer와 ColdFusion이 구동중인 서버에서 실행하면 사용자 계정이 생성되거나 삭제됩니다. VB 등으로 서버용 Component를 만들 필요도 없습니다. 업로드하자고 SiteGalaxy와 같은 업로드 콤포넌트 깔아댈 이유도 없습니다. 그냥 저게 답니다. ㅎㅎㅎㅎ 고로 ColdFusion은 위대합니다. 하하하하;;;

가령 ColdFusion으로 회원가입을 받는 웹사이트를 만들고 가입시 메일을 제공하고자 한다면 위 스크립트에서 사용자의 이메일주소 등만 동적으로 할당하면 자동으로 메일이 활성화 되겠죠? 물론 바이러스체크활성, 스팸단어 설정, 도메인추가 등등등 hMailServer가 제공하는 모든 COM API를 전부 구현할 수 있습니다.

웹메일 클라이언트의 구축은 지구상에서 감히 말하건데 ColdFusion보다 간단한 언어는 없습니다. (참조 : http://adoberia.co.kr/iwt/blog/blog.php?tn=flex&id=522 에서 제가 발표한 문서와 예제 중에서 메일 부분을 참조하시길 바랍니다.)


출처 : http://www.coldfusionfunnylog.com/blog/

반응형

'Server' 카테고리의 다른 글

vsftp port 변경  (0) 2010.10.05
mysql 리플리케이션으로 DB를 백업하자  (0) 2010.10.05
vsftpd passive mode 사용  (0) 2010.10.05
find를 사용한 치환  (0) 2010.10.05
mod_rewrite 별도 설치  (0) 2010.10.05

//