James3之——安装与配置

时间:2024-04-10 07:17:05

Why?

 

What?

参见官方文档,此处不赘述:https://github.com/apache/James-project

 

How?

接下来将和大家一起逐步搭建一套私人James邮件服务 ^_^

Pre:
安装完: JDK,vim,wget、unzip


 

一、基础配置部署:

#1、下载并解压:
wget https://www.apache.org/dyn/closer.lua/james/server/james-server-app-3.1.0-app.zip
unzip james-server-app-3.1.0-app.zip

#2、进入bin目录并启动服务
cd james-server-app-3.1.0/bin/
sh run.sh

#3、添加邮箱后缀[注意:如果是在本地模拟则需在hosts中做域名映射,否则会出现意想不到的问题]
vim ../conf/domainlist.xml
3.1 autodetect、autodetectIP 值为false,不自动获取domain与IP,而使用下面设置的指定邮箱后缀
3.2 defaultDomain 值为你的邮箱后缀。如需处理多个邮箱后缀的邮件,则需加一个 <domainnames>节点,并将其他邮箱后缀添加到子节点domainname中即可:
  <defaultDomain>develop.com</defaultDomain>
  <domainnames>
      <domainname>develop1.com</domainname>
      <domainname>develop2.com</domainname>
  </domainnames>

#4、项目启动一会后,出现下面内容即为启动成功:
INFO  xx:xx:xx,xxx | org.apache.james.app.spring.JamesAppSpringMain | Apache James Server is successfully started in xxxxxx milliseconds.

[可能遇到的报错]:

nested exception is java.net.UnknownHostException: xxx:xxx:将xxx添加映射到/etc/hosts后重启即可.


 

二、使用mysql存储数据:

James默认使用JPA以文件存储相关数据,本节将介绍如何将相关数据存储到数据库中

  • 将 驱动jar包添加到 conf/lib 下。(如:mysql-connector-java-5.1.7-bin.jar)
wget http://www.stonelu.com/public/mysql-connector-java-5.1.7-bin.jar -P james-server-app-3.1.0/conf/lib
  • 修改 conf/james-database.properties 注释掉 默认的DERBY存储,使用mysql:
# 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
database.driverClassName=com.mysql.jdbc.Driver
database.url=jdbc:mysql://www.test.com:3306/james?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8
database.username=james#账密自行修改即可
database.password=james

# Supported adapters are:
# DB2, DERBY, H2, HSQL, INFORMIX, MYSQL, ORACLE, POSTGRESQL, SQL_SERVER, SYBASE
#vendorAdapter.database=DERBY
vendorAdapter.database=MYSQL
  • 修改 conf/mailetcontainer.xml:
  1.     postmaster 修改为管理员邮箱,可以为 [email protected]
  2.     repositoryPath 同时存在文件存储(file://)、数据库存储(db://) 的,将默认的文件存储注释掉,并释放数据库存储;对于只存在文件存储的,不进行释放。分别如下图所示:

James3之——安装与配置

James3之——安装与配置

     3.    RemoteAddrNotInNetwork所在节点注释掉

James3之——安装与配置

  • 最后启动项目即可

[可能遇到的报错]:

建表报错:Index column size too large. The maximum column size is 767 bytes.

        SET GLOBAL innodb_file_format = BARRACUDA;

        SET GLOBAL innodb_large_prefix = ON;

        执行后重启项目即可


 

三、启用SMTP认证:

  • 修改 conf/smtpserver.xml:

          第一个 helloname 节点修改为邮箱后缀[域名] ->降低发送的邮件被(收件方邮件服务器)扔到垃圾箱的几率

          authRequired、verifyIdentity 设置为true能够防止此邮件服务被当做邮件中继服务,防止跨账号邮件行为,避免被域名信誉机构拉入黑名单,影响或无法正常发送邮件。

James3之——安装与配置

James3之——安装与配置

  • 最后重启服务即可

 

四、使用SSL/TLS协议:

  • 将 sunjce_provider.jar(在jre/lib/ext下有)到 lib下(注意:不是conf/lib下)
wget http://www.stonelu.com/public/sunjce_provider.jar -P james-server-app-3.1.0/lib
  • 生成keystore:
keytool -genkey -alias james -keyalg RSA -keystore keystore

James3之——安装与配置

  • 接下来演示 SMTP 使用SSL/TLS协议(POP和IMAP类比即可):

James3之——安装与配置

Tips:

1)配置文件:

SMTP - smtpserver.xml

POP - popserver.xml

IMAP - imapserver.xml

 

2)端口:

POP3 - port 110, Secure POP3 - port 995
IMAP - port 143, Secure IMAP4 - port 993
SMTP - port 25, Secure SMTP - port 465

  • 最后 重启服务即可

 

五、验证:

# 添加用户的指令: AddUser <username> <password>
# windows:
james-cli.bat -h localhost -p 9999 AddUser [email protected] sec123
james-cli.bat -h localhost -p 9999 AddUser [email protected] sec456
# linux:
sh james-cli.sh -h localhost -p 9999 AddUser [email protected] sec123
sh james-cli.sh -h localhost -p 9999 AddUser [email protected] sec456
  • 安装 Foxmail客户端,并添加账号

James3之——安装与配置

James3之——安装与配置

James3之——安装与配置

  • 给外网的其他邮件服务器发送邮件

        这块不太好验证,因为主流的公共邮箱(如腾讯、Gmail)均具有强大的反垃圾邮件拦截能力,给前者发送的邮件绝大部分会被退回。

        可以在购买域名后,做好域名解析(包括A、MX记录),然后在服务器上搭一套James邮件服务,在服务器上验证或者在服务器与本地之间进行验证都是可以的。

        这里也暴露了一个非常大的问题:邮件服务可能会收到垃圾邮件的攻击,这也是邮件服务提供商面临的一个大问题,国内外大部分服务器提供商均对25端口进行了限制,防止垃圾邮件服务泛滥。在邮件服务层面还是需要进行很多反垃圾邮件工作的,此课题已超出本文范围,在此便不进行讨论了。

 

James3之——安装与配置

James3之——安装与配置

 

Tips:
1)获取所有可用的指令及用法: 
  # windows:
  james-cli.bat
  # linux:
  sh james-cli.sh

2)James数据操作途径:
  整体来说,有三种: xml配置文件、james-cli客户端操作、数据库操作(立即生效)
  
  例如: 
    > 添加Domain有三个途径:
      配置文件:
        domainlist.xml
      james-cli客户端:
        # windows:
        james-cli.bat -h localhost -p 9999 AddDomain develop3.com
        # linux:
        sh james-cli.sh -h localhost -p 9999 AddDomain develop3.com
      数据库操作:
        insert into james_domain values('develop3.com');
        
    > 添加用户有两个途径:
      james-cli客户端:
        # windows:
        james-cli.bat -h localhost -p 9999 AddUser [email protected] sec789
        # linux:
        sh james-cli.sh -h localhost -p 9999 AddUser [email protected] sec789
      数据库操作:
        INSERT INTO james_user VALUES('[email protected]', 'MD5', MD5('sec789'));