公司的邮箱系统一直是我在维护,最近公司有webmail的需求(之前都是用邮件客户端连的),其实大部分我也是按照网上的教程来的,但基本都比较老了,有些地方略有不同,也踩到了坑。我在这里就说一下我的安装步骤吧。
环境:Windows Sever 2008 && php 5.4.0 && apache && mysql && hmailserver 5.6.6(安装webmail之前升级到了当前最稳定的版本)
首先看了几个开源免费的web邮件系统,觉得afterlogic好像看起来还不错,首先当然是去afterlogic官网下载,直接下载最新版7.7,解压放到apache的web目录:
然后用浏览器访问这个目录:http://localhost/xx/webmail (这里xx为成实际你放的路径),我配置的v-hosts,所以直接给个二级域名指向了这个目录,这样更优雅一点webmail.公司网址.com
这时候肯定是不能用的,你需要在进到http://localhost/xx/webmail/install进行安装配置:
检测环境,没问题前面两步直接next,有问题处理问题,然后:
这一步是配置数据库,数据库帐号一定要有远程链接的权限,一开始使用root帐号一直提示报错SQLSTATE[HY000] [1045]xxxxxx等等,就是root没开外网权限,只能在localhost下使用,我这里是外网连接,所以不行。database name就是数据库名,首次肯定要创建一个,之后几步配置webmail管理员帐号、邮件测试,我就不截图了,都是一些简单的操作。
创建好之后,会直接跳转到管理员配置面板,http://localhost/xx/webmail/adminpanel/,以后也可以直接访问网址。
这里遇到了一个大坑,由于对php水平掌握还确实是有限,一开始一打开这个目录直接报错
纳尼?上线的项目也会出这样的大bug?管理面板无法访问?什么鬼?看Apache下面的log竟然没反应,也没php error log,wtf?看代码看了一头雾水,好像都没啥问题呀?只好让我们组大牛帮看看,大牛一看说Zend目录下也有log,mdzz,一开始就用wamp这种东西,导致原始的都不知道怎么用了。。。一看log,报
"Can't use method return value in write context in x:\xx\webmail\adminpanel\modules\common\inc\post.php on line 98"
这是什么鬼,就是这行代码报错:
if (empty($this->oSettings->GetConf('Common/AdminPassword')) || crypt(trim(CPost::get('txtOldPassword')), \CApi::$sSalt) === $this->oSettings->GetConf('Common/AdminPassword')) { $this->oSettings->SetConf('Common/AdminPassword', crypt(trim(CPost::get('txtNewPassword')), CApi::$sSalt)); }去掉后面的条件,从第一个
empty($this->oSettings->GetConf('Common/AdminPassword'))这里就开始报错,和大牛追踪了半天也没发现个所以然,然后百度一下报错 Can't use method return value in write context 恍然大悟,我估计原因应该是php版本导致的,empty不能判断一个函数的返回值,只能返回一个变量,mdzz,然后代码一改:
$cft = $this->oSettings->GetConf('Common/AdminPassword'); if (empty($cft) || crypt(trim(CPost::get('txtOldPassword')), \CApi::$sSalt) === $this->oSettings->GetConf('Common/AdminPassword')) { $this->oSettings->SetConf('Common/AdminPassword', crypt(trim(CPost::get('txtNewPassword')), CApi::$sSalt)); }
成功打开管理员面板
如果能正常访问并且登录之后,网页就会一直提示你删除install目录,因为install不需要权限就能访问,而且可以随意更改配置。
所以直接去webmail文件夹下删除install目录就好,如果你想要以防万一可以把install压缩备份一下。
然后在网页adminpanel面板里自定义一些配置(如默认为英文,去里面改成默认中文等)。至此,webmail基本就完成了。
以上就基本就完成了webmail的访问,但hmailserver还自带了PHPWebAdmin,找到hmailserver安装目录下面的PHPWebAdmin,复制到xx/webmail的目录下,然后我命名为management,这样直接访问http://localhost/xx/webmail/management/在登录个人邮箱就能自助该密码等操作啦,当然还要配置下:
把config-dist.php复制一下然后改成config.php
打开config.php,把$hmail_config['rooturl'] = "xxxxx" 改成你的实际外网路径
然后一个英文版的PHPWebAdmin就OK了,登录一下(图片是我已经汉化了的,具体会在下面说)
基本功能都是有了,用户也能自己修改密码已经增加签名等操作,但是还有个添加外部账户的功能这个一般来说都是不需要的,于是看下代码(好简单粗暴的代码),找到同目录下的include_treemenu.php,打开搜索account_externalaccounts 这个就是外部帐号功能,这行完整代码是:$dtree .= "d.add(" . $dtitem++ . ",$di,'" . GetStringForJavaScript("External accounts") . "','index.php?page=account_externalaccounts&accountid=" . $accountid . "&domainid=" . $obDomain->ID. "');\r\n";
这个代码有两处,都注释掉(我这里是28和222行)因为他分了不同的用户等级权限。
然后刷新一下,外部帐号就没了
一个简单的web管理系统基本就完成了。在http://localhost/xx/webmail/页面加一个链接<a href="http://localhost/xx/webmail/management/"> 忘记密码 <a/>就更完美了。
最后说说怎么汉化,看了一下代码,是拿的hmailserver里面的语言配置,那么直接上网下载个hmailserver的chinese.ini(中文包),放在hmailserver\Languages下面,然后打开hmailserver\Bin\hMailServer.INI,在后面ValidLanguages=english后面加一个chinese,变成ValidLanguages=english,chinese,重启一下hmailserver服务,打开hmailserver进入控制面板左上角就看到Chinese选项了。
如果hmailserver能显示中文,那么基本就OK了,去刚才的webmail/management/config.php找到$hmail_config['defaultlanguage'] = "english";把english改成chinese,即:$hmail_config['defaultlanguage'] = "chinese";刷新一下网页,就变成中文了。
附:chinese.ini 我也是网上下载的不知道哪个版本,然后自己改了一些字符串,看起来稍微通畅一点。(新建一个txt改成chinese.ini然后右键编辑粘贴进去)
[Strings] String_1=文件 String_2=退出 String_3=帮助(&A) String_5=关于... String_6=域名 String_8=服务 String_9=帐号 String_10=别名 String_11=邮件列表 String_12=MX查询 String_13=设置 String_14=DNS缓存 String_15=SMTP String_16=安全 String_17=POP3 String_18=IP范围 String_19=镜像 String_20=日志 String_21=欢迎 String_22=域 String_23=域名 String_25=SMTP验证 String_26=保存(&S) String_27=帐号地址 String_28=激活 String_29=AD用户 String_30=是 String_32=密码 String_33=最大容量(MB) String_34=大小(MB) String_35=调试 String_40=项目 String_41=数值 String_42=动作 String_43=在下面的空格中填入活动目录相关信息,你就可以把当前用户帐号连接到活动目录中的某个帐号,当用户连接到服务器,hMailServer将使用活动目录来校验用户的密码。 String_44=活动目录帐号 String_45=用户名 String_46=重定向自 String_47=发送到 String_48=地址 String_50=常规 String_51=成员 String_52=收件人地址 String_55=服务 String_56=当前状态 String_57=E-mail地址 String_58=解析(&R) String_59=邮件服务器 String_61=缓存更新间隔: String_62=每个 String_63=小时 String_64=TCP端口 String_65=SMTP端口 String_66=连接 String_67=最大连接并发数(0表示无限制) String_68=中继邮箱 String_69=重试次数 String_70=重试间隔(单位:分钟) String_71=开放转发 String_72=垃圾邮件 String_73=允许纯文本密码验证 String_74=允许发件人为空 String_75=转发 String_80=垃圾邮件延迟,超过定量,连接将被延迟 String_81=数量 String_82=延迟(秒) String_87=POP3端口 String_88=开始IP String_89=结束IP String_90=优先级 String_91=地址 String_92=0是最低优先级。100是最高优先级。 String_93=选项 String_94=允许SMTP连接 String_95=允许SMTP转发 String_96=允许POP3连接 String_97=镜像邮件地址 String_98=复制本服务器上的全部邮件,本服务器所有收到的和外发的邮件都将被转发到下面空格中所填的镜像邮件地址. String_99=装置 String_100=记录 String_101=应用程序 String_104=TCP/IP String_105=文件 String_106=活动目录 String_107=帐号 String_114=邮件列表 String_115=输入收件人地址 String_117=启动 String_118=停止 String_120=暂停 String_121=暂停中 String_122=运行中 String_123=启动中 String_124=停止 String_125=停止中 String_132=完成 String_133=错误 String_137=数据库服务器地址 String_138=用户信息 String_139=数据库 String_140=名称 String_149=<上一步(&B) String_150=下一步(&N)> String_151=取消(&C) String_152=输入连接信息 String_153=通知 String_154=密码将以为明文方式存储在hmailserver.ini.请配置你的操作系统环境,避免其他用户读取这个文件。 String_155=向导程序有足够的信息来结束这个操作 String_158=请键入数据库服务器的名字。 String_159=请键入数据库名字 String_160=连接到 String_161=连接成功。 String_162=无法连接到数据库服务器。 String_163=创建数据库 String_164=创建数据库成功。 String_165=不能创建数据库。 String_166=预备创建数据库表格... String_167=预创成功。 String_168=预创失败。 String_170=创建数据库表格... String_171=创建数据库表格成功。 String_172=不能创建数据库表格。 String_173=运行hDBUpdater.exe失败 String_174=创建数据库失败. String_175=请返回上一步,重新检测你的设置。 String_176=添加域名... String_180=添加活动目录帐号 String_188=Root密码 String_189=Root密码(重复) String_190=向导程序将自动为你配置hMailServer数据库。你唯一要做的就是输入要使用的Root密码。 String_192=按结束按钮退出向导。 String_193=结束(&F) String_194=IMAP设置 String_195=IMAP端口 String_196=IMAP String_197=SMTP转发器 String_198=欢迎信息 String_199=你输入的不是一个有效的域名。 String_200=激活 String_205=其他 String_206=调试信息 String_208=如果空格: String_209=存在数值: String_210=然后 String_211=删除邮件 String_212=来自 String_212=来自 String_213=查看日志 String_214=投递线程 String_215=高级 String_216=假期邮件 String_217=允许 String_218=主题 String_219=文本 String_220=你的修改没有保存,是否现在保存? String_221=IMAP会话 String_222=允许IMAP连接 String_223=到 String_224=病毒控制 String_225=使用ClamWin String_226=ClamScan执行命令 String_227=ClamScan病毒库路径 String_228=删除邮件 String_229=删除邮件附件 String_230=通知发件人 String_231=通知收件人 String_232=结束操作 String_233=不能创建数据库。 String_234=不能连接到 String_235=你必须输入一个Root密码。 String_236=输入的密码不匹配。 String_237=连接错误 String_238=自动侦测 String_239=hMailAdmin可以自动侦测ClamScan的安装路径和病毒库位置。请校验自动侦测的结果是否正确。 String_240=实时 String_242=清除 String_243=类型 String_244=线程 String_245=时间 String_246=IP String_247=允许连接 String_248=请求递交验证 String_249=允许递交来自 String_250=到本地帐号 String_251=到远程帐户 String_252=本地到本地的帐号 String_253=本地到外部的帐号 String_254=外部到本地的帐号 String_255=外部到外部的帐号 String_257=IP范围 String_258=路由 String_259=路由 String_260=目标SMTP主机 String_261=重试次数 String_262=递交所有地址 String_263=只递交下列地址: String_264=添加地址前必须先保存路由设置。 String_267=统计 String_268=发送统计结果给hMailServer.com String_269=如果你允许此统计选项,每到1000条信息,统计结果将会被发送到hMailServer.com。请注意,只有你的版本号会被包含在统计结果中发送出去,你的个人信息和主机配置信息都不会被发送。 String_270=主机名 String_271=自动回复 String_272=刷新 String_273=未递交的邮件 String_274=ID String_275=创建 String_276=下次尝试 String_277=关闭(&C) String_278=捕获所有地址,所有未指定收件人的邮件都发送到: String_279=输入密码 String_280=取消 String_281=确定 String_282=本地域名 String_283=外部域名 String_284=把这个路由视作 String_285=服务器请求验证 String_286=新密码 String_288=<<加密的>> String_289=递交 String_290=使用数据库递交记录 String_291=当病毒被发现时 String_292=使用外部反病毒扫描程序 String_293=反病毒扫描程序位置 String_294=返回值 String_295=外部反病毒扫描程序 String_298=你在SMTP设置中还没有为此主机指定公开可用的主机域名. String_299=版本 String_300=服务器信息 String_301=开始之旅 String_302=RBL String_303=使用SPF String_304=校验发送者是否有DNS-MX记录 String_305=RBL String_306=DNS主机 String_307=预期结果 String_308=拒绝信息 String_311=外部帐号 String_312=服务器地址 String_313=服务器信息 String_314=服务器类型 String_315=两次下载邮件的间隔时间(分钟) String_316=天 String_317=立即删除邮件 String_318=在指定天数以后删除邮件 String_319=不要删除邮件 String_320=外部帐号 String_321=脚本 String_322=重新载入脚本 String_323=查看脚本 String_324=检查脚本语法 String_325=语法正确。 String_326=服务器 String_327=状态 String_328=数量 String_329=已处理邮件 String_330=带毒邮件 String_331=垃圾邮件 String_332=服务器在线从 String_333=管理级别 String_334=用户 String_335=主机别名 String_336=规则 String_337=规则 String_338=使用AND String_339=使用OR String_340=触发 String_341=编辑 String_342=查找类型 String_343=删除邮件 String_344=转发邮件 String_345=移动到IMAP文件夹 String_346=回复 String_347=邮件体 String_348=来自(名称) String_349=来自(地址) String_350=IMAP文件夹 String_351=查找 String_352=预设邮件头 String_353=自定义邮件头 String_355=邮件尺寸 String_356=抄送 String_357=匹配 String_358=包含 String_359=大于 String_360=少于 String_361=表达式 String_362=不包含 String_363=不匹配 String_364=SMTP命名中的收件人 String_365=重启hMailServer服务 String_366=最大邮件尺寸(KB) String_367=TCP/IP监听选项 String_369=监听中 String_372=IP地址 String_373=你的hMailServer数据库已经升级。 String_374=缓存 String_375=生存时间(秒) String_376=点击率 String_377=协议 String_378=规则循环限制 String_379=备份 String_380=还原 String_381=备份到 String_382=邮件 String_383=查看日志... String_384=压缩文件 String_388=还原自 String_389=清除队列 String_390=你真要清除递交队列中的项目吗? String_391=连接 String_393=启动时自动连接 String_394=服务器版本必须匹配客户端版本.服务器:%1,客户端:%2. String_395=实用工具 String_396=从服务器发送 String_397=发送到 String_398=所有帐号 String_399=指定域名 String_400=使用通配符匹配帐号 String_401=发送 String_402=邮件已被发送。 String_403=邮件 String_404=别名 String_405=登出 String_406=解锁 String_407=立即发送 String_408=转发 String_409=允许转发 String_410=保留原始邮件 String_411=免过滤地址符 String_412=字符 String_413=扩展 String_414=校验HELO/HELO命令中的主机名 String_415=当垃圾邮件被发现时... String_416=递交,但修改邮件头 String_417=添加X-hMailServer-Spam String_418=添加X-hMailServer-Reason String_419=添加到邮件主题中 String_420=灰名单 String_421=延迟重试投递的时间(分钟) String_422=几天后移除未使用记录 String_423=几天后移除已使用记录 String_424=SURBL String_425=SURBL String_426=反病毒程序扫描的最大邮件尺寸(KB) String_427=阻挡附件 String_428=阻挡如下扩展名的附件: String_429=阻挡附件 String_430=通配符 String_431=描述 String_432=在MIME邮件头中递交给收件人 String_433=脚本功能 String_434=线程 String_435=最大线程命令 String_436=进程优先级 String_437=同名的邮件路由已经存在 String_438=SMTP转发器指定的时本机地址。你确定你要做这个操作吗? String_439=RFC兼容性 String_440=允许无效的断行符 String_441=收到太多无效命令时,断开客户端连接 String_442=无效命令允许数 String_443=绑定到本地IP地址 String_444=单次会话中允许的最大收件人数 String_445=你必须指定IP范围段的开始/结束地址。 String_446=同名的IP范围段已经存在 String_447=性能 String_448=默认域名 String_449=服务器信息 String_450=运行功能脚本 String_451=隐藏密码 String_452=类型 String_453=公开-任何人都可以发送到本列表 String_454=成员-只有列表成员才能发送到本列表 String_455=通告-只有下列地址才被允许发送到本列表: String_456=已使用容量(MB) String_457=这个域名设置了最大尺寸,因此你必须指定帐号最大尺寸 String_459=无效的用户名或密码。 String_460=连接时,询问密码 String_461=保存密码 String_462=会话 String_463=尽快地 String_464=立即递交... String_465=使用SQL服务器验证 String_466=使用Windows验证 String_467=数据库名 String_468=验证 String_469=白名单 String_470=TCP/IP端口 String_471=协议 String_472=签名 String_473=纯文本签名 String_474=HTML签名 String_475=使用此签名,如果发件人帐号中没有指定签名 String_476=覆盖帐号签名 String_477=追加帐号签名 String_478=允许签名 String_479=添加签名到回复邮件 String_480=添加签名在本地邮件 String_481=允许域名签名 String_482=hMailServer管理员密码 String_483=最后登陆时间 String_484=最大帐号数量 String_485=最大别名数量 String_486=最大邮件列表数量 String_487=无法添加新的帐号,因为已经到达本域名的最大帐号数限制。 String_488=无法添加新的别名,因为已经到达本域名的最大别名数限制。 String_489=无法添加新的邮件列表,因为已经到达本域名的最大列表数限制。 String_490=限制 String_491=帐号最大容量(MB) String_496=转发中继 String_497=你确定要删除%s? String_498=注意:此功能是设计用来备份数据库小于1GB的电子邮件数据。如果您的数据库大于这个范围,请参考文件使用外部工具备份。 String_499=从接收头检索日期 String_500=向上移动 String_501=向下移动 String_502=自动过期 String_503=立即下载 String_504=如果此选项被取消选中许多电子邮件服务器将不会接受从您的服务器上发出的电子邮件。您确定要取消选择它? String_505=您已设定hMailServer不允许空发件人的电子邮件地址。许多电子邮件服务器将不接受电子邮件从您的服务器与此配置。 String_506=停止规则处理 String_507=激活SMTP String_508=激活POP3 String_509=激活IMAP String_510=hMailServer管理员密码 String_511=您需要这个密码可以管理您的hMailServer安装,请记住它。 String_513=组 String_514=组 String_515=权限为%s String_516=任何人 String_517=SSL证书 String_518=SSL证书 String_519=此操作将改变配置TCP/IP端口为默认值。您确定要这么做? String_520=无 String_521=设置标头值 String_522=号的尝试 String_523=头名称 String_524=选择... String_525=空帐户 String_526=文件夹 String_527=访问 String_528=编辑权限... String_529=使用SSL String_530=证书文件 String_531=私钥文件 String_532=添加传递至头 String_533=公共文件夹的名称 String_534=权限 String_535=选择全部 String_536=选择无 String_537=查找 String_538=读 String_539=创建邮箱 String_540=删除邮箱 String_541=管理 String_542=插入邮件 String_543=一笔勾销 String_544=保持看到国旗 String_545=保留删除标志 String_546=保持其他标志 String_547=无 String_548=垃圾邮件评分 String_550=垃圾邮件测试 String_551=反垃圾邮件 String_552=垃圾邮件评分马克门槛 String_553=垃圾邮件评分降低门槛 String_554=密码安全性太低,你确定要使用它? String_555=当前会议 String_556=个人信息 String_557=名字 String_558=姓氏 String_559=使用SpamAssassin的 String_560=使用评分从SpamAssassin的 String_561=本地主机名 String_562=远程主机名 String_563=远程TCP/IP端口 String_564=配置警告 String_565=打开的会话数 String_566=文件名 String_567=传递队列 String_568=启用 String_569=转发给 String_570=下一个下载 String_571=其他行动 String_572=编辑文件夹 String_574=添加(&A)... String_575=编辑(&E)... String_576=公用文件夹 String_577=垃圾邮件标志的门槛 String_578=垃圾邮件删除门槛 String_579=分数 String_580=SSL证书 String_581=证书文件 String_582=私钥文件 String_583=索引... String_584=选择语言... String_585=连接... String_586=文件(&F) String_587=帮助(&H) String_588=管理密码 String_589=TCP/IP端口 String_590=严重性 String_591=高 String_592=关键 String_593=hMailServer配置为允许从外部交货的IP范围%s的外部帐户这可能使服务器容易受到垃圾邮件。我们建议您禁用此选项。 String_594=确定(&O) String_595=属性 String_596=动作 String_597=选择(&S)... String_598=选择 String_599=发送使用路由 String_600=数字的尝试 String_601=仅包括本次会议 String_602=创建文件夹 String_603=删除文件夹 String_604=显示 String_606=添加... String_607=空文件夹 String_608=比较 String_609=删除 String_610=选择语言 String_611=语言 String_612=你确定要删除帐户中的所有邮件? String_614=TCP/IP地址 String_615=对象 String_616=保存 String_617=天 String_618=添加 String_619=此操作将更改IP配置范围为默认值。您确定要这么做? String_620=最大邮件大小扫描(或) String_621=保持文件打开 String_622=测试 String_623=匹配 String_624=不匹配 String_626=如果你要自动备份进程,请使用脚本StartBackup.vbs在\hMailServer\扩展\工具发现。 String_627=hMailServer必须重新启动使更改生效。 String_628=你想重新启动hMailServer吗? String_629=该hMailServer服务器已重新启动。 String_630=如果您更改这些设置,hMailServer必须重新启动使更改生效。 String_631=最大数目的异步任务线程 String_632=诊断 String_633=此工具允许您执行您的hMailServer安装诊断。 String_634=选择您想要的域上运行测试。 String_635=复制到剪贴板 String_637=自动停用 String_638=过期 String_639=传入中继 String_640=最大无效登录尝试次数 String_641=分钟后复位 String_642=分钟后解除 String_643=创建和发送副本 String_644=允许路线者 String_645=交付尝试 String_646=消息索引 String_647=请注意... String_648=更多细节... String_649=该自动禁止功能块的IP地址。如果有太多无效的登录尝试是从一个特定的IP地址时,该IP地址将被禁止。 String_650=如果您正在运行一个Web邮件系统,这意味着邮件系统可能会被封锁,如果太多无效的登录尝试向它提出的。 String_651=你确定要删除所选的项目? String_652=绕道灰名单对SPF通行证 String_653=本地到本地电子邮件地址 String_654=当地和外部电子邮件地址 String_655=外部当地的电子邮件地址 String_656=外部外部电子邮件地址 String_659=目前已有此名称的文件夹。 String_660=层次定界符 String_661=一个文件夹名称不能包含的层次分隔符。 String_662=绕道灰名单留言时从A或MX记录到达。 String_663=当发件人选择路由时,发件人为 String_664=当收件人选择路由时,收件人为 String_665=远程电子邮件地址 String_666=本地的电子邮件地址 String_667=该hMailServerIMAP的层次分隔符%S1。文件夹名称指定包含了%S2标准不是一个层次分隔,但可能是一个文件夹名称的一部分。如果您选择保存当前文件夹的名称,一个单一的文件夹名为%S3将被创建时,这一行动是执行。是否要使用此文件夹的名称? String_668=测试... String_669=不正确的用户名或密码。