James邮件服务搭建和使用

igxiaoshan Lv5

内网邮件服务调研

一下是一些流行的,基于Java开源的邮件服务器项目

Apache James

Apache James(Javae Apache Mail Enterprise Server)是一个功能齐全的开源邮件服务器。它支持STMPPOP3IMAP协议,可以高度定制和扩展。

  • GitHub仓库
  • 官网地址
  • 特点:
    • 支持STMPPOP3IMAP协议
    • 强大的邮件处理和过滤规则
    • 支持用户和域管理
    • 模块化设计,易于扩展
    • 支持通过JPAJDBCLDAP等多种用户存储方式

SubEthaSTMP

SubEthaSMTP是一个基于Java的高性能STMP服务器和客户端库。它可以用做邮件服务器的一部分,也可以用于测试邮件服务器。

  • GitHub仓库

  • 特点:

    • 轻量级,高性能
    • 易于嵌入到其他应用中
    • 灵活的STMP处理,可以定制邮件处理逻辑

GreenMail

GreenMail是基于Java的测试邮件服务器,它支持STMPPOP3IMAPSTMPS协议。虽然它主要用于测试目的,但也可以用作轻量级的邮件服务器。

  • GitHub仓库
  • 特点:
    • 支持STMPPOP3IMAPSTMPS协议
    • 易于集成到测试框架中
    • 支持邮件存储和检索

如何选择和使用

  • Apache James 是一个功能全面的邮件服务器,适合需要完整邮件服务器功能的项目。它适合大规模部署,并且有丰富的扩展和定制能力。

  • SubEthaSMTP 更加轻量级,适合需要定制 SMTP 处理的场景。如果你只需要 SMTP 功能且希望有高性能,可以选择它。

  • GreenMail 更适合测试和开发环境,如果你需要一个简易的邮件服务器来进行邮件功能的测试,它是一个很好的选择。

搭建Apache James服务

使用Docker部署项目;参考部署文档

1
2
3
4
5
6
7
8
9
10
11
# 1. Download the driver:
wget https://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/2.7.2/mariadb-java-client-2.7.2.jar

# 2. Generate the keystore with the default password `james72laBalle`:
keytool -genkey -alias james -keyalg RSA -keystore keystore

# 3. Start MariaDB
docker-compose up -d mariadb

# 4. Start James
docker-compose up james
  • **DockerHub下载 **官网镜像

    1
    docker pull apache/james:jpa-3.8.1
  • 下载和安装

    • 从**Apache James 官网 **下载最新版本的Apache James

    • 解压到服务器安装目录

      1
      tar -zxvf james-project-3.8.1-source-release.zip /mydata/james/james-project
  • 使用docker-compose启动服务

    1
    docker-compose up james

配置James

启动James服务需要对服务进行配置;参考配置文档

docker-compse.yml配置详情

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

version: '3'

# In order to start James JPA app on top of mariaDB:
# 1. Download the driver: `wget https://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/2.7.2/mariadb-java-client-2.7.2.jar`
# 2. Generate the keystore with the default password `james72laBalle`: `keytool -genkey -alias james -keyalg RSA -keystore keystore`
# 3. Start MariaDB: `docker-compose up -d mariadb`
# 4. Start James: `docker-compose up james`

services:

james:
depends_on:
- mariadb
image: apache/james:jpa-3.8.1
container_name: james
ports:
- "2525:25"
- "110:110"
- "143:143"
- "587:587"
- "993:993"
- "465:465"
- "4190:4190"
- "8000:8000"
volumes:
- /mydata/james/james-project/server/apps/jpa-app/mariadb-java-client-2.7.2.jar:/root/libs/mariadb-java-client-2.7.2.jar
- /mydata/james/james-project/server/apps/jpa-app/sample-configuration/james-database-mariadb.properties:/root/conf/james-database.properties
- /mydata/james/james-project/server/apps/jpa-app/keystore:/root/conf/keystore
- /mydata/james/james-project/server/apps/jpa-app/sample-configuration/dnsservice.xml:/root/conf/dnsservice.xml
- /mydata/james/james-project/server/apps/jpa-app/sample-configuration/domainlist.xml:/root/conf/domainlist.xml
- james-data:/mydata/james/data

mariadb:
image: mariadb:10.6
container_name: james-mariadb
environment:
- MARIADB_ROOT_PASSWORD=test
- MARIADB_DATABASE=james
- MARIADB_USER=test
- MARIADB_PASSWORD=test
ports:
- "3307:3306"
volumes:
- mariadb-data:/mydata/maridb/data


volumes:
mariadb-data:
james-data:

dnsservice.xml配置详情

1
2
3
4
5
6
7
8
9
10
11
12
13
14

<dnsservice>
<autodiscover>true</autodiscover>
<authoritative>false</authoritative>
<maxcachesize>50000</maxcachesize>

<!-- install -->
<servers>
<server>114.114.114.114</server>
<server>192.168.116.1</server>
<server>192.168.116.0</server>
</servers>
</dnsservice>

domainlist.xml配置详情

1
2
3
4
5
6
<domainlist>
<autodetect>false</autodetect>
<autodetectIP>false</autodetectIP>
<defaultDomain>igsshan.net.cn</defaultDomain>
</domainlist>

james-database-mariadb.properties配置详情

1
2
3
4
5
6
# Use derby as default
database.driverClassName=org.mariadb.jdbc.Driver
database.url=jdbc:mariadb://james-mariadb/james
database.username=test
database.password=test

补充

james-database.properties配置详情

1
2
3
4
5
6
7
8
9
10
# Use derby as default
database.driverClassName=org.apache.derby.jdbc.EmbeddedDriver
database.url=jdbc:derby:../var/store/derby;create=true
database.username=app
database.password=app

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