博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ApacheJames3.0 配置安装
阅读量:3779 次
发布时间:2019-05-22

本文共 6532 字,大约阅读时间需要 21 分钟。

转自:

  • James-3.1.0 较于 2.3 功能更加完善,详情参见官网:
  • 拥抱 Docker,可以将数据卷挂载到 Host 上,还可集成 ElasticSearch 或 Lucene (基于 Guice):

 

What?

参见官方文档,此处不赘述:

 

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、添加邮箱后缀[注意:如果是在本地模拟则需在hosts中做域名映射,否则会出现意想不到的问题]
vim ../conf/domainlist.xml
2.1 autodetect、autodetectIP 值为false,不自动获取domain与IP,而使用下面设置的指定邮箱后缀
2.2 defaultDomain 值为你的邮箱后缀。如需处理多个邮箱后缀的邮件,则需加一个
节点,并将其他邮箱后缀添加到子节点domainname中即可:
develop.com
develop1.com
develop2.com
#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 : 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 修改为管理员邮箱,可以为 postmaster@yourDomain
  2.     repositoryPath 同时存在文件存储 (file://)、数据库存储 (db://) 的,将默认的文件存储注释掉,并释放数据库存储;对于只存在文件存储的,不进行释放。分别如下图所示:

     3.    RemoteAddrNotInNetwork 所在节点注释掉

  • 最后启动项目即可

[可能遇到的报错]:

建表报错: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 能够防止此邮件服务被当做邮件中继服务,防止跨账号邮件行为,避免被域名信誉机构拉入黑名单,影响或无法正常发送邮件。

  • 最后重启服务即可

 

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

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

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

  • 最后 重启服务即可

 

五、验证:

  • 添加两个用户:、,密码分别为:sec123、sec456
# 添加用户的指令: AddUser 
# windows:
james-cli.bat -h localhost -p
9999 AddUser Danny@develop.com sec123
james-cli.bat -h localhost -p
9999 AddUser Jenny@develop1.com sec456
# linux:
sh james-cli.sh -h localhost -p
9999 AddUser Danny@develop.com sec123
sh james-cli.sh -h localhost -p
9999 AddUser Jenny@develop1.com sec456
  • 安装 Foxmail 客户端,并添加账号

  •  与 邮件互通

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

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

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

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

 

 

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
        # linux:
        sh james-cli.sh -h localhost -p 9999 AddDomain
      数据库操作:
        insert into james_domain values('');
        
    > 添加用户有两个途径:
      james-cli 客户端:
        # windows:
        james-cli.bat -h localhost -p 9999 AddUser sec789
        # linux:
        sh james-cli.sh -h localhost -p 9999 AddUser sec789
      数据库操作:
        INSERT INTO james_user VALUES('', 'MD5', MD5('sec789'));

 

你可能感兴趣的文章
在springBoot中使用Mapper类问题
查看>>
filebeat___log -input
查看>>
GitHub使用
查看>>
关于学习Java的一点点心得。附Dos命令的基操
查看>>
SpringCloud详细教程3-Eureka服务注册中心
查看>>
SpringMVC中常用的几个注解@RequestBody
查看>>
SpringCloud详细教程6-Zookeeper
查看>>
Freemarker使用mht制作导出word模板
查看>>
Freemarker使用xml写word模板-遇到的坑
查看>>
PyQt5基础用法ui转py后需要修改的地方
查看>>
Scanner类
查看>>
基本类型包装类
查看>>
System类常用方法
查看>>
Runtime类、Math类和Random类的常用方法
查看>>
数据处理类常用方法
查看>>
Collections和Character类 常用静态方法
查看>>
HTML之Javascript——BOM浏览器对象模型
查看>>
JAVA基础中的基础
查看>>
JDBC基础操作
查看>>
连接池
查看>>