hMailServer 管理员设置使用总结
<!doctype html>hMailServer 使用总结
hMailServer管理员设置使用总结
背景
由于公司企业邮箱需要监视到与外部邮箱的往来情况,以及对用户邮箱空间的爆满预警,经研究需要通过设置邮箱规则和脚本事件来实现这些需求。本文主要介绍了在hMailServer规则设置,脚本事件编写。
目录
- 服务器规则设置
- 脚本事件编写
服务器规则设置
官方帮助文档:https://www.hmailserver.com/documentation/latest/?page=reference_rule
设置步骤如动图:
触发
触发条件可以设置多个,多个条件之间可以用and 或or 预定义的字段 包含:邮件内容、抄送、来自、邮件大小、SMTP 命名中的收件人、主题、发送到、发送尝试
查找类型包含:包含、匹配、大于、少于、不包含、不匹配、正则表达式、通配符。
数值:要查找的条件。
操作
操作包含的事件:删除邮件、转发邮件、移动到 IMAP 文件夹、回复、 运行功能脚本、设置邮件头值、停用处理规则、新建并发送一份副本、绑定到本地IP地址、通过路由发送。
运行功能脚本
启动hMailServer管理员 在菜单--设置--高级--脚本中点击查看脚本,跳转到目录有文件VBS文件 EventHandlers.vbs ,打开编辑,在预先定义的事件后增加你需要的操作,编写完成后回到脚本页面,点击【重新载入脚本】,勾选已启用点击【保存】,若脚本原来就是已启用状态可以先取消已启用,点保存,再勾选已启用,点保存(这样操作时为了避免脚本没有重新加载)。
点击【检查脚本语法】可以帮助开发者校测脚本是否存在语法问题。
官方说明:无论何时修改脚本文件,都必须单击刷新脚本以便hMailServer刷新,记录更改。hMailServer将整个脚本的副本保留在内存中,这可以提高性能。
脚本事件编写
官方文档:https://www.hmailserver.com/documentation/latest/?page=reference_scripts
VBS教程:https://www.cnblogs.com/veggiegfei/p/5943260.html
hMailserver功能扩展:COM API http://blog.sina.com.cn/s/blog_4cf05f9a010139cv.html
批量删除超过X天的邮件 https://www.hmailserver.org/viewtopic.php?f=15&t=98
所有hMailServer脚本都应放置在名为EventHandlers.vbs的文件中。该文件位于hMailServer Events目录中,
事件 | 目的 | 实现版本 |
---|---|---|
OnBackupCompleted | 备份完成时执行。 | 4.2 |
OnBackupFailed | 当备份失败时执行。 | 4.2 |
OnClientConnect | 当客户端连接时执行。 | 4 |
OnAcceptMessage | 使用SMTP协议将电子邮件发送到服务器时执行。 | 4 |
OnDeliveryStart | 在任何规则执行之前,邮件发送已经开始直接执行。 | 4.4 |
OnDeliverMessage | 当电子邮件正在交付时执行。执行全局规则后执行,但在帐户级规则之前执行。 | 4 |
OnDeliveryFailed | 如果邮件传递失败时执行 | 5 |
OnExternalAccountDownload | 从远程POP3帐户下载邮件时执行。 | 5.3 |
OnError | 如果hMailServer中发生错误,则执行此操作。 | 5 |
OnSMTPData | 收到SMTP数据时执行 | 5.4 |
执行顺序
设置
按照以下步骤启用脚本:
-
启动hMailServer管理员
-
导航至设置 - >高级 - >脚本
-
选择已启用
-
点击保存以保存您的更改
-
无论何时修改脚本文件,都必须单击刷新脚本以便hMailServer刷新,记录更改。
hMailServer将整个脚本的副本保留在内存中,这可以提高性能。
示例
在发送邮件时检查发件人邮箱空间是否达到预警值80%,若达到则发送邮件通知发件人。
注意:下面两行代码用于处理邮件中 中文字符乱码问题。
oMsg.Charset = "GB2312"
oMsg.EncodeFields = False
Sub OnAcceptMessage(oClient, oMessage)
If oClient.Username = "" Then Exit Sub '如果是不是本服务器内的用户,oClient.Username将为空便不需要后续处理
Dim obApp
Set obApp = CreateObject("hMailServer.Application")
' Authenticate. Without doing this, we won't have permission
' to change any server settings or add any objects to the
' installation.
Call obApp.Authenticate("Administrator", "你的管理员密码") '获得操作权限
' Locate the domain we want to add the account to
Dim obDomain
Set obDomain = obApp.Domains.ItemByName("你的域名") '本地域名
Dim obAccount
Set obAccount = obDomain.Accounts.ItemByAddress(oClient.UserName)
Dim oMsg
Set oMsg = CreateObject("hMailServer.Message")
oMsg.Charset = "GB2312"
oMsg.EncodeFields = False
If obAccount.QuotaUsed > 80 Then '已使用容量大于80%警告
oMsg.From = "发件人" '发件人
oMsg.FromAddress = "发件人地址" '发件人地址
oMsg.Subject = "您的邮箱已使用: " & obAccount.QuotaUsed & "%"
oMsg.AddRecipient "Dear User", obAccount.Address
'警告信内容,此处包含了被警告账户的最大容量和已用容量等信息
oMsg.Body = "最大容量: " & obAccount.MaxSize & "MB" & vbCrLf
oMsg.Body = oMsg.Body & "已使用容量: " & obAccount.Size & "MB" & vbCrLf
oMsg.Body = oMsg.Body & "当邮箱爆满后将收不到任何邮件,请及时清理邮箱。"
oMsg.Save
EventLog.Write ("Quota warning: " & obAccount.QuotaUsed & "% for " & obAccount.Address) '日志
End If
End Sub
当电子邮件正在交付时执行检测收件人邮箱空间是否达到预警
Sub OnDeliverMessage(oMessage)
If oMessage.FromAddress = "系统账户" Then '避免一直重复发送邮件
wscript.quit '退出当前函数
End If
For i = 0 To oMessage.Recipients.Count - 1
Dim account
Set account = oMessage.Recipients.Item(i)
Dim address, obApp
Set obApp = CreateObject("hMailServer.Application")
Call obApp.Authenticate("Administrator", "你的管理员密码")
Dim obDomain
Set obDomain = obApp.Domains.ItemByName("你的域名") '本地域名
If InStr(account.Address, "@你的域名")>0 Then
Dim obAccount
address = address & account.Address
Set obAccount = obDomain.Accounts.ItemByAddress(account.Address)
If obAccount.QuotaUsed > 80 Then '已使用容量大于80%警告
Dim oMsg
Set oMsg = CreateObject("hMailServer.Message")
oMsg.Charset = "GB2312"
oMsg.EncodeFields = False
oMsg.From = "clouddata<系统账户>" '发件人
oMsg.FromAddress = "系统账户" '发件人地址
oMsg.Subject = "您的邮箱已使用: " & obAccount.QuotaUsed & "%"
oMsg.AddRecipient "Dear User", obAccount.Address
'警告信内容,此处包含了被警告账户的最大容量和已用容量等信息
oMsg.Body = "最大容量: " & obAccount.MaxSize & "MB" & vbCrLf
oMsg.Body = oMsg.Body & "已使用容量: " & obAccount.Size & "MB" & vbCrLf
oMsg.Body = oMsg.Body & "当邮箱爆满后将收不到任何邮件,请及时清理邮箱。"
oMsg.Save
EventLog.Write ("Quota warning: " & obAccount.QuotaUsed & "% for " & obAccount.Address) & " From:" & oMessage.FromAddress'日志
End If
End If
Next
End Sub