本文共 6532 字,大约阅读时间需要 21 分钟。
转自:
参见官方文档,此处不赘述:
接下来将和大家一起逐步搭建一套私人 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 #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. develop1.com develop2.com
[可能遇到的报错]:
nested exception is : 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 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
这块不太好验证,因为主流的公共邮箱 (如腾讯、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'));