Apache James를 설치하고 접속해서 메일을 주고 받는 것까지 정리하였고, 여기에서는 주고 받은 메일을 저장하는 방식에 대해서 정리한다.

 

  1. Apache James 메일 서버 - 설치
  2. Apache James 메일 서버 - 설정
  3. Apache James 메일 서버 - 메일 클라이언트
  4. Apache James 메일 서버 - Text와 JPA(MariaDB등)
  5. Apache James 메일 서버 - 스팸 필터 (SpamAssassin)

 

앞서 정리한 conf 폴더의 설정 파일 중에서 mailbox.xml는 주고 받은 메일을 저장하는 형태를 지정하는 파일로,

James에서는 jpa, maildir, memory 등의 방식이 제공된다.

<mailbox>
   <!-- supported providers are: -->
   <!-- jpa, maildir, memory -->
   <!-- Be aware that maildir will only work on unix like operation systems! -->
   <provider>jpa</provider>
</mailbox>

mailbox.xml

jpa, maildir, memory의 세가지 방식이 제공되는데,

jpa는 OpenJPA를 이용하여 메일 정보를 각종 데이터베이스 (MariaDB, Oracle 등)에 저장하여 관리하는 것으로 기본 설정으로 지정되어 있다.

maildir은 하나의 메일을 EML 파일로 저장하고, 전체 메일 리스트 등을 Text 파일로 관리하는 방식을 의미한다.

메일 사용자, 도메인 등은 jpa와 동일하게 OpenJPA를 이용하여 데이터베이스에 저장한다.

memory는 일종의 테스트 용으로 maildir와 유사하지만 메일 정보를 파일이 아닌 메모리에 저장하기 때문에 James를 재가동하면 메일 송수신 내역이 사라진다.

여기에서는 maildir과 jpa 설정 방식에 대한 자세한 내용을 정리한다.



먼저, mailbox.xml에서 위와 같이 <provider>가 jpa로 지정되었는지 확인하고 (기본 설정),

conf 폴드의 james-database.properties 파일을 다음과 같이 수정한다.

database.driverClassName=org.mariadb.jdbc.Driver
database.url=jdbc:mariadb://127.0.0.1:3306/james_mail
database.username=root
database.password=gujc1004

# Supported adapters are:
# DB2, DERBY, H2, HSQL, INFORMIX, MYSQL, ORACLE, POSTGRESQL, SQL_SERVER, SYBASE
vendorAdapter.database=MYSQL

james-database.properties

james-database.properties 파일은 데이터베이스 방식을 사용하기 위해 데이터베이스 접속 정보를 입력하는 파일로 Java의 JDBC 설정 내용과 동일한 값을 입력한다.

기본 데이터베이스는 DERBY로 지정되어 있고, 앞서서 설정한 도메인(forest71.com), 사용자(gujc1@forest71.com), 메일 송수신 정보 등이 DERBY에 저장되어 있다.

DERBY는 많은 데이터를 처리하기 어렵고 관련 자료를 구하기도 어렵다.

여기에서는 James가 OpenJPA로 지원하는 여러가지 데이터베이스 중 보편적인 MariaDB를 사용한다.

MariaDB를 설치하는 방법은 여기서 정리하지 않으니 인터넷 자료를 찾아서 설치하고, james_mail이라는 데이터베이스를 생성하면 된다.

다른 데이터베이스를 생성한 경우에는 위 코드에서 database.url에 해당 데이터베이스 이름을 지정하면 된다.

 

주의: MariaDB를 사용하지만 드라이버 클래스 이름만 mariadb를 지정하고, vendorAdapter.database 변수에는 MYSQL을 지정해서 사용한다.

MariaDB대신에 MYSQL을 설치해서 사용해도 된다.

 

MariaDB와 Apache James를 연결하기 위한 JDBC 드라이버를 MariaDB 드라이버(Connector/J) 공식 사이트에서 다운로드 받는다.

Java용 라이브러리를 선택하고, download 버튼을 클릭한다.

다운로드 받을 때, 다음 그림의 왼쪽과 같이 이메일 등의 개인 정보를 입력하라고 하는데,

입력하지 않고 가만이 있으면 다운로드가 진행된다.

다운로드 받은 jar파일을(현재는 mariadb-java-client-2.7.1.jar) 복사해서

James의 conf폴더 하위에 있는 lib(james-server-app-3.5.0\conf\lib) 폴더에 넣어준다.

그리고, 제임스를 재가동(james restart)한다.

 

제임스를 재가동하면 데이터베이스를 MariaDB로 변경하였기 때문에

앞서서 설정한 도메인(forest71.com), 사용자(gujc1@forest71.com), 메일 송수신 정보가 없다.

콘솔창에서 사용자를 다시 생성한다.

     james-cli.bat adduser gujc1@forest71.com gujc1234

도메인은 따로 설정 파일에서 (domainlist.xml) 등록했기 때문에 다시 생성하지 않아도 된다.

 

데이터베이스 관리도구로 MariaDB에 접속하면 지정한 데이터베이스(james_mail)에 자동으로 테이블들이 생성되어 있고

도메인 테이블(james_domain)에 임의로 사용하는 도메인(forest71.com)이 등록되어 있는 것을 볼 수 있다.

james_user 테이블에 새로 생성한 사용자가

james_mailbox에는 사용자별 메일함이

james_mail에는 송수신한 메일들이 저장되어 있다.

 

대량의 메일을 관리하기에는 MariaDB나 Oracle등의 DBMS를 사용하는 것이 좋은데

첨부파일도 데이터베이스에 저장하는 것이 좋은지에 대해서는 의문이 있다.

지나치게 데이터 베이스 용량이 커지면서 백업과 복구에 소요되는 시간등의 문제가 있을 것 같다.

 

이번에는 JPA외에 전통적인 text 방식으로 관리하는 maildir 방식으로 구현한다.

다만, text 방식은 윈도우에서 제대로 작동하지 않는다.

이유는 아래에 정리하였으며, 여기에서는 리눅스로 정리한다.

mailbox.xml에서 다음과 같이 <provider>를 maildir로 변경한다.

<mailbox>
   <!-- supported providers are: -->
   <!-- jpa, maildir, memory -->
   <!-- Be aware that maildir will only work on unix like operation systems! -->
   <provider>maildir</provider>
</mailbox>

mailbox.xml

그리고, 제임스를 재가동(james restart)한다.

 

conf 폴더에 있는 mailbox-maildir.properties 파일에는 다음과 같은 내용이 있다.

maildir.folder=../var/store/maildir/%domain/%user
maildir.messageNameParser.strictMode=false

mailbox-maildir.properties

James를 설치한 폴더의 하위에 var 폴더 하위로 이어지는 위와 같은 경로가 있다.

이중 도메인(%domain)은 forest.com이고, 사용자(%user)는 gujc1이다.

즉, james-server-app-3.5.0\var\store\maildir\forest71.com\ 폴더에 사용자별로 폴더가 생긴다.

메일을 하나 발송한 뒤에 해당 폴더를 확인하면 다음과 같은 폴더들이 생성된다.

각 계정의 기본 폴더(gujc1)가 받은 메일함(inbox)이고

보낸 메일함은 .Sent이고, 각 폴더 안에 new와 cur 폴더가 있다.

새로 받은 메일은 new 폴더에, imap 접속하고 나면 cur폴더에 EML 파일이 생성된다.

 

다음 그림과 같이 메일의 EML 파일명에 콜론(:)이 포함되어 있다.

이 콜론이 윈도우에서는 파일명으로 사용할 수 없는 특수 문자라서 maildir 방식은 리눅스에만 사용할 수 있다.

 

maildir로 지정하면 메일 내용은 EML 파일로 생성해서 관리하고, 계정별 메일 리스트는 james-uidlist라는 텍스트 파일로 관리한다.

james-uidlist는 메일함 별로 생성되어 관리하는데,

한 사용자가 하나의 메일함에 메일을 많이 가지고 있는 경우 처리 속도가 느린 단점이 있다.

 

송수신된 메일들을 파일로 처리하기 때문에,

앞서서 메일 정보를 저장하는 james_mail 테이블을 확인하면 메일이 추가 되지 않는 것을 확인할 수 있다.

 

+ Recent posts