hMailServer 管理员设置使用总结

<!doctype html>hMailServer 使用总结

hMailServer管理员设置使用总结

背景

由于公司企业邮箱需要监视到与外部邮箱的往来情况,以及对用户邮箱空间的爆满预警,经研究需要通过设置邮箱规则和脚本事件来实现这些需求。本文主要介绍了在hMailServer规则设置,脚本事件编写。

目录

  1. 服务器规则设置
  2. 脚本事件编写

服务器规则设置

官方帮助文档: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

 

posted @ 2018-07-09 11:04  年华若流矢  阅读(3198)  评论(0编辑  收藏  举报