<!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