我有Exchange 2010,我需要運行一個使用Web服務的進程來對付每個新郵件來進入郵箱。該過程基本上將電子郵件添加到內部任務列表。Powershell在新電子郵件事件(Exchange 2010)上調用Web服務
我可以爲此使用Powershell嗎?
從來沒有使用過Powershell,但我沒有真正瞭解它的功能。
如果沒有人能提出另一種方法,除了每隔X秒監視一次郵箱以外。真的,我喜歡它基於事件,所以如果沒有新的郵件,然後沒有處理。
乾杯, 邁克
我有Exchange 2010,我需要運行一個使用Web服務的進程來對付每個新郵件來進入郵箱。該過程基本上將電子郵件添加到內部任務列表。Powershell在新電子郵件事件(Exchange 2010)上調用Web服務
我可以爲此使用Powershell嗎?
從來沒有使用過Powershell,但我沒有真正瞭解它的功能。
如果沒有人能提出另一種方法,除了每隔X秒監視一次郵箱以外。真的,我喜歡它基於事件,所以如果沒有新的郵件,然後沒有處理。
乾杯, 邁克
我花了幾天的尋找到這一點,似乎那是非常困難的自定義代碼添加到傳入的電子郵件事件。如果Exchange認爲它會減慢電子郵件系統,那麼許多方法就會被忽略。 (http://www.outlookcode.com/article.aspx?id=62)
另一種方法是掛接到可以工作但感覺有點破綻的SMTP事件。要做到這一點,你需要寫一個wscript,然後註冊一個電子郵件抵達事件。
下面是一個vb腳本示例,用於將隨機十六進制引用添加到通過SMTP發送的每封電子郵件中。
<SCRIPT LANGUAGE="VBScript">
Sub IEventIsCacheable_IsCacheable()
'To implement the interface, and return S_OK implicitly
End Sub
Sub ISMTPOnArrival_OnArrival(ByVal Msg, EventStatus)
Dim Flds
randomize()
set Flds = Msg.Fields
With Flds
strSubject = .Item("urn:schemas:httpmail:subject")
if instr(strSubject, "Ref=") = 0 then
strSubject = Replace(strSubject, CHR(9), "") & " (Ref=" & hex(replace(timer(), ".", "")) & hex(rnd()) & ")"
.Item("urn:schemas:httpmail:subject") = strSubject
.Update
else
strSubject = LEFT(strSubject, instr(strSubject, "(Ref=") - 1) & MID(strSubject, instr(instr(strsubject, "(Ref="), strSubject, ")") + 1, Len(strSubject)) & " (Ref=" & hex(replace(timer(), ".", "")) & hex(rnd()) & ")"
.Item("urn:schemas:httpmail:subject") = strSubject
.Update
end if
End With
Msg.Datasource.Save
EventStatus = 0 'Run next sink
End Sub
</SCRIPT>
然後註冊腳本運行這個。
Cscript smtpreg.vbs /add 1 onarrival SMTPAddRef CDO.SS_SMTPOnArrivalSink "mail from=*"
Cscript smtpreg.vbs /setprop 1 onarrival SMTPAddRef Sink ScriptName "C:\ENTERPATH\SMTPRef.vbs"
要取消註冊腳本,請執行以下操作;
cscript smtpreg.vbs /remove 1 onarrival SMTPAddRef
最有彈性的方法似乎是創建一個基於計時器的系統來檢查新的郵件每X分鐘。
不像我希望的那樣光滑,但它會做。
希望這可以幫助別人。
你可能希望在服務器上運行它? AFAIK,PowerShell,甚至Exchange管理外殼,在這裏幫不了什麼忙。您需要查看「Exchange Web Services託管API」,這是一個.NET庫,您必須使用PowerShell或C#來調用。我需要調查Exchange提供的事件類型。 – 2010-05-15 17:50:11