参见官方文档,此处不赘述:https://github.com/apache/James-project
接下来将和大家一起逐步搭建一套私人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 java.net.UnknownHostException: xxx:xxx:将xxx添加映射到/etc/hosts后重启即可.
James默认使用JPA以文件存储相关数据,本节将介绍如何将相关数据存储到数据库中
wget http://www.stonelu.com/public/mysql-connector-java-5.1.7-bin.jar -P james-server-app-3.1.0/conf/lib
# 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
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;
执行后重启项目即可
第一个 helloname 节点修改为邮箱后缀[域名] ->降低发送的邮件被(收件方邮件服务器)扔到垃圾箱的几率
authRequired、verifyIdentity 设置为true能够防止此邮件服务被当做邮件中继服务,防止跨账号邮件行为,避免被域名信誉机构拉入黑名单,影响或无法正常发送邮件。
wget http://www.stonelu.com/public/sunjce_provider.jar -P james-server-app-3.1.0/lib
keytool -genkey -alias james -keyalg RSA -keystore keystore
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
# 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
这块不太好验证,因为主流的公共邮箱(如腾讯、Gmail)均具有较强的反垃圾邮件能力,给前者发送的邮件绝大部分会被退回。
可以在购买域名后,做好域名解析(包括A、MX记录),然后在服务器上搭一套James邮件服务,在服务器上验证或者在服务器与本地之间进行验证都是可以的。
这里也暴露了一个非常大的问题:邮件服务可能会受到垃圾邮件的攻击,这也是邮件服务提供商面临的一个大问题,现国内外大部分服务器提供商均对25端口进行了限制,防止垃圾邮件泛滥。在邮件服务层面还是需要进行很多反垃圾邮件工作的,此课题已超出本文范围,在此便不进行讨论了。
Tips:
1)获取所有可用的指令及用法:
# windows:
james-cli.bat
# linux:
sh james-cli.sh2)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'));