hmailserver
郵件使用者的收信送信的規則
作者:cschen33.tw@gmail.com
建立日期:2010/01/25
最後日期:2010/01/25
有一些公司的"主管"
要求限制某一些人只可以收送公司內部郵件,其它的郵件一律禁止,然而這一些功能並不是一般的
mail server 可以做的到,而且不是基本功能,因此可能需要借助別的程式的功能.
本來想沿用postfix或sendmail
的功能,但是似乎做不到,因為原來的porcmail是local delivery agent
,只能針對進入本機的郵件做處理,而一般我們可以使用別名取代其部份功能,若是外寄的郵件就無法處理,而sendmail 的
ruleset似乎不是那麼好懂,因此最後就尋找別的軟體
測試過無數的軟體最後可以用的如下
1.hmailserver 一個不錯的mail server 畫面很乾淨,5.0版已經不是開源的軟體,整合了防spam,防毒的功能
其文件的->安裝->系統要求,中提到最大的 hMailServer主機包含了 20 000 個以上的帳號.
2.rainbower mail server
-全中文化的軟體,一看就覺得是商業軟體,但是其有上述的兩項功能,限制外寄,及郵件審核,而且只要勾選就可以了,但是似乎是中小型的mail
server 不知其效能如何
最後選擇了hmailserver
環境
若是單純的限制部份使用者外寄郵件,使用2.可以很簡單的達到,然而公司是跨集團,因此有不同的網域,也不是每一個公司都有vpn
可以使用內部連線,來收送郵件,因此有了這個因素就無法單純使用一般的設定
假設有三家公司
1.a.com.tw
2.b.com.tw
3.c.com.tw
這三家是使用外部來寄信,因此是外部郵件,但是對集團來說它們是內部郵件
實作(使用rule規則)
雖然可以成功針對進來的郵件作限制,但對外送的郵件似乎不是那麼直覺,而郵件的動作只有轉信或是刪除,回覆等功能和我需要寫一封信來
通知寄件者似乎做不到
#必須使用者驗證寄信-不驗證就無法得知寄件者
#寄信要使用全域規則來設定
#收信使用個人帳號的規則
限制user1來收寄外部郵件
考慮
寄信,限制寄外部郵件
寄件者是user1@a.com.tw
收件者不是a.com.tw,b.com.tw,c.com.tw三家公司刪除
收信,限制收外部郵件
收信者是user1@a.com.tw
寄件者不是a.com.tw,b.com.tw,c.com.tw三家公司刪除
寄信
全域規則 寄件者 user1@a.com.tw 收件者不含a.com.tw b.com.tw,c.com.tw (以and來運算)
動作刪除
收信
個人規則 收信者是user1@a.com.tw
寄件者不含a.com.tw,b.com.tw,c.com.tw(以and來運算)
#剛開始不要使用刪除而是使用轉寄到某一個使用者,來確認
#啟用驗證的方法 :hmailserver->進階->ip範圍 可以設定 內寄/外送 使用驗證模式,來限制寄到外部
實作(vbscript)
是討論區中有談到限制本地使用者寄信,但不合乎我的需求因此被我改寫如下,可以運用在集團間
'限制使用者寄發非許可網域的信,若是使用
者寄
發時會通知他,針對寄信
'郵件寄件者
oMessage.FromAddress
'收件者數量
oMessage.recipients.count
'清除原有的收件者
oMessage.clearrecipients()
'寫一封信oApp=
CreateObject("hMailServer.Application")
Sub
OnDeliverMessage(oMessage)
Dim LocalOnlyAccounts(100) '只允許本地帳號
Dim temprecipients(100) '收件者帳號
Dim
varDomain
'本地網域
Dim
varAddress
Dim
RejectedAddress '拒絕位址
Dim
GroupDomains(10) '集團網域
varDomain =
"a.com.tw"
'網域的名稱
GroupDomains(0) =
"b.com.tw"
'公司集團網域1
GroupDomains(1) =
"c.com.tw"
'公司集團網域2
LocalOnlyAccounts(0)= "abc" & "@" &
varDomain '限制使用者1
'LocalOnlyAccounts(1)= "user2" & "@"
&
varDomain '限制使用者2
RejectedAddress = ""
For i = 0 to uBound(LocalOnlyAccounts)
If oMessage.FromAddress =
LocalOnlyAccounts(i) then '寄件者,如果是被限制的帳號
for j = 0 to
oMessage.recipients.count -1
'將收件者寫入陣列temprecipients
temprecipients(j) = oMessage.recipients.item(j).address
next 'j
j = 0
k =
oMessage.recipients.count -1
while j <=
k
If
instr(temprecipients(j),"@"& VarDomain) = 0 and _
instr(temprecipients(j),"@"&GroupDomains(0)) = 0 and _
instr(temprecipients(j),"@"&GroupDomains(1)) = 0 then
'收件者,如果未包含本地的使用者
l=
j
RejectedAddress = RejectedAddress & temprecipients(l) &
VBNewLine
while l < k
temprecipients(l) = temprecipients(l+1)
l=l+1
wend
temprecipients(k) = ""
k=k-1
else
j=j+1
end
if
wend
oMessage.clearrecipients()
For j = 0 to k
varAddress = temprecipients(j)
oMessage.AddRecipient "", varAddress
Next 'j
oMessage.save
End if
Next 'i
If RejectedAddress <> "" then
'當發現一些不合法的收件者時,寫一封信告訴他
dim oApp, newMessage
dim MessageSubject
dim MessageRecipientAddress
Set oApp =
CreateObject("hMailServer.Application")
' Give this script permission to access
all
' hMailServer settings.
Call
oApp.Authenticate("Administrator",
"AdminPassword")
'使用管理者來驗證
MessageRecipientAddress =
oMessage.FromAddress
MessageSubject =
"自動拒絕的郵件"
'設定郵件的主旨
Set newMessage =
CreateObject("hMailServer.Message")
newMessage.From = "自動系統郵件
<admin@a.com.tw>"
'寄件者
newMessage.FromAddress =
"admin@a.com.tw"
'寄件者
newMessage.Subject = MessageSubject
newMessage.AddRecipient "",
MessageRecipientAddress
newMessage.Body = "你的郵件主旨: " &
oMessage.subject & " 因為你的帳號被限制只能寄信給集團內部的使用者"
newMessage.Body = NewMessage.body &
"所有位於:" & vbNewLine & VarDomain
for i = 0 to ubound(GroupDomains)
newMessage.Body
= NewMessage.body &
GroupDomains(i)
next
newMessage.Body = NewMessage.body &
vbNewLine & vbNewLine
newMessage.Body = NewMessage.body &
"下面的收寄者不會收到你的信"
newMessage.Body = NewMessage.body &
RejectedAddress
newMessage.Save
End if
End Sub
將程式存起來放在hmailserver安裝程式\Events\EventHandlers.vbs下就可以了
當然要變更你的上述紅字部份,藍色可能不需要變更,因為localhost預設寄內部不需要驗證
記得檔案格式utf-16 lf
在設定->進階->腳本->檢查語法 如果正確
重新載入
如此設定就會套用
中文化
我已經更新hmailserver上的taiwanese語言為100%
http://www.hmailserver.com/devnet/?page=translation_status
點選taiwanese
全選複製,開啟一個可以存成utf-16 LF格式的編輯軟體(我使用pspad)
將檔案存到安裝目錄下的Languages目錄下檔名taiwanese.ini
到到安裝目錄的bin目錄打開hMailServer.INI
在[GUILanguages]段落加入下面藍色的字
ValidLanguages=english,swedish,taiwanese
停用再重啟服務
進入hmailserver 選擇 file ->language