PowerShell Call Web Service на новом событии электронной почты (Exchange 2010)
-
26-09-2019 - |
Вопрос
У меня Exchange 2010, и мне необходимо запустить процесс, используя веб-сервисы против каждого нового электронного письма, чтобы войти в почтовый ящик. Процесс в основном добавляет электронное письмо на внутренний список задач.
Могу ли я использовать PowerShell для этого?
Никогда не использовал PowerShell, прежде чем у меня на самом деле не имеет подсказку на его возможностях.
Если никто не может предложить другой способ выполнять это, кроме мониторинга почтового ящика каждые x секунд. На самом деле я бы хотел, чтобы это событие основано, что, если нет новой почты, а не обработки.
Ура, Майк
Решение
Я потратил несколько дней, глядя в это, и кажется, что очень сложно добавить пользовательский код в событие входящего электронного письма. И многие из способов сделать это просто проигнорируют, если обмен считает, что он замедляет систему электронной почты. (http://www.outlookcode.com/article.aspx?id=62.)
Другой метод состоит в том, чтобы подключить к событиям SMTP, которые работают, но почувствуют себя как взломать. Для этого вам нужно написать WSCRT, затем зарегистрируйте это против события прибытия электронной почты.
Вот пример сценария 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 минут.
Не так слад, как я надеялся, но это будет делать.
Надеюсь, это помогает другим.