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=MYSQL4、修改 conf/mailetcontainer.xml:
- postmaster 修改为管理员邮箱,可以为 postmaster@yourDomain
- repositoryPath 同时存在文件存储 (file://)、数据库存储 (db://) 的,将默认的文件存储注释掉,并释放数据库存储;对于只存在文件存储的,不进行释放。分别如下图所示:
3. RemoteAddrNotInNetwork 所在节点注释掉
重启项目
自动创建的表如下:重启前连接数据库,创建数据库james
3、启用SMTP认证:
修改 conf/smtpserver.xml:
第一个 helloname 节点修改为邮箱后缀 \[域名\] -> 降低发送的邮件被 (收件方邮件服务器) 扔到垃圾箱的几率
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
给外网的其他邮件服务器发送邮件
这块不太好验证,因为主流的公共邮箱 (如腾讯、Gmail) 均具有较强的反垃圾邮件能力,给前者发送的邮件绝大部分会被退回。
可以在购买域名后,做好域名解析(包括 A、MX 记录),然后在服务器上搭一套 James 邮件服务,在服务器上验证或者在服务器与本地之间进行验证都是可以的。
这里也暴露了一个非常大的问题:邮件服务可能会受到垃圾邮件的攻击,这也是邮件服务提供商面临的一个大问题,现国内外大部分服务器提供商均对 25 端口进行了限制,防止垃圾邮件泛滥。在邮件服务层面还是需要进行很多反垃圾邮件工作的,此课题已超出本文范围,在此便不进行讨论了。
补充:
Tips:
1)获取所有可用的指令及用法:
# windows:
james-cli.bat
# linux:
sh james-cli.sh
> 添加 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 Sara@develop.com sec789
\# linux:
sh james-cli.sh -h localhost -p 9999 AddUser Sara@develop.com sec789
数据库操作:
INSERT INTO james\_user VALUES('Sara@develop.com', 'MD5', MD5('sec789'));