ApacheJames3.7.1+mysql 配置安装

1、下载地址:Index of /dist/james/server/3.7.1https://archive.apache.org/dist/james/server/3.7.1/

(1)下载并解压:

 wget ​​​​​​https://archive.apache.org/dist/james/server/3.7.1/james-server-app-3.7.1-app.zip

 uzip james-server-app-3.7.1-app.zip

(2)添加邮箱后缀[注意:如果是在本地模拟则需在hosts中做域名映射,否则会出现意想不到的问题]

  vim ../conf/domainlist.xml

   2.1 autodetect、autodetectIP 值为false,不自动获取domain与IP,而使用下面设置的指定邮箱后缀

   2.2 defaultDomain 值为你的邮箱后缀。如需处理多个邮箱后缀的邮件,则需加一个   <domainnames>节点,并将其他邮箱后缀添加到子节点domainname中即可:       <defaultDomain>develop.com </defaultDomain> <domainnames>   <domainname>develop1.com </domainname> <domainname>develop2.com </domainname>   </domainnames>

(3)进入bin目录并启动服务 cd james-server-app-3.1.0/bin/ sh run.sh

(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 后重启即可.

2、mysql数据库配置:

1、docker启动一个mysql实例,我用的是5.7

docker run --name myjames -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=data@1234 mysql:5.7

2、mysql驱动放到lib目录下:/james-server-spring-app-3.7.1/lib 下

james文件目录:

 3、修改conf/james-database.properties 注释掉 默认的 DERBY 存储,使用 mysql:

  23 # Use derby as default
 24 # database.driverClassName=org.apache.derby.jdbc.EmbeddedDriver
 25 # database.url=jdbc:derby:../var/store/derby;create=true
 26 # database.username=app
 27 # database.password=app
 28 database.driverClassName=com.mysql.jdbc.Driver
 29 database.url=jdbc:mysql://你的地址域名或者IP:3306/james?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8
 30 database.username=root
 31 database.password=data@1234
 32 # Supported adapters are:
 33 # DB2, DERBY, H2, HSQL, INFORMIX, MYSQL, ORACLE, POSTGRESQL, SQL_SERVER, SYBASE
 34 vendorAdapter.database=MYSQL

4、修改 conf/mailetcontainer.xml:

  1. postmaster 修改为管理员邮箱,可以为 postmaster@yourDomain
  2. repositoryPath 同时存在文件存储 (file://)、数据库存储 (db://) 的,将默认的文件存储注释掉,并释放数据库存储;对于只存在文件存储的,不进行释放。分别如下图所示:

    3. RemoteAddrNotInNetwork 所在节点注释掉

 重启项目

自动创建的表如下:重启前连接数据库,创建数据库james

3、启用SMTP认证:

 修改 conf/smtpserver.xml:

  1. 第一个 helloname 节点修改为邮箱后缀 \[域名\] -> 降低发送的邮件被 (收件方邮件服务器) 扔到垃圾箱的几率
  2. authRequired、verifyIdentity 设置为 true 能够防止此邮件服务被当做邮件中继服务,防止跨账号邮件行为,避免被域名信誉机构拉入黑名单,影响或无法正常发送邮件。

4、使用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

  •  vim smtpserver.xml

     同理修改另外两个文件:

  • 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

5、验证:

 添加两个用户,密码1234

user01@james.com 

user02@james.com

./james-cli.sh AddUser user01@james.com 1234

 

 

 

 

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

     
       
    1. 这块不太好验证,因为主流的公共邮箱 (如腾讯、Gmail) 均具有较强的反垃圾邮件能力,给前者发送的邮件绝大部分会被退回。
    2. 可以在购买域名后,做好域名解析(包括 A、MX 记录),然后在服务器上搭一套 James 邮件服务,在服务器上验证或者在服务器与本地之间进行验证都是可以的。
    3. 这里也暴露了一个非常大的问题:邮件服务可能会受到垃圾邮件的攻击,这也是邮件服务提供商面临的一个大问题,现国内外大部分服务器提供商均对 25 端口进行了限制,防止垃圾邮件泛滥。在邮件服务层面还是需要进行很多反垃圾邮件工作的,此课题已超出本文范围,在此便不进行讨论了。

补充:

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

  1. > 添加 Domain 有三个途径:
  2. 配置文件:
  3. domainlist.xml
  4. james-cli 客户端:
  5. \# windows:
  6. james-cli.bat -h localhost -p 9999 AddDomain develop3.com
  7. \# linux:
  8. sh james-cli.sh -h localhost -p 9999 AddDomain [develop3.com][]
  9. 数据库操作:
  10. insert into james\_domain values('develop3.com');
  11. > 添加用户有两个途径:
  12. james-cli 客户端:
  13. \# windows:
  14. james-cli.bat -h localhost -p 9999 AddUser Sara@develop.com sec789
  15. \# linux:
  16. sh james-cli.sh -h localhost -p 9999 AddUser Sara@develop.com sec789
  17. 数据库操作:
  18. INSERT INTO james\_user VALUES('Sara@develop.com', 'MD5', MD5('sec789'));