<!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
来源:https://www.cnblogs.com/XiaoZone/p/9282795.html