Веб-служба вызовов Powershell для нового события электронной почты (Exchange 2010) - PullRequest
1 голос
/ 12 мая 2010

У меня есть Exchange 2010, и мне нужно запускать процесс с использованием веб-служб для каждого нового письма, чтобы войти в почтовый ящик. Процесс в основном добавит электронное письмо во внутренний список задач.

Могу ли я использовать Powershell для этого?

Никогда раньше не использовал Powershell, я не имею понятия о его возможностях.

Если нет, то кто-нибудь может предложить другой способ сделать это, кроме мониторинга почтового ящика каждые X секунд. На самом деле, я бы хотел, чтобы это основывалось на событиях, поэтому, если нет новой почты, то никакой обработки.

Ура, Mike

1 Ответ

1 голос
/ 19 мая 2010

Я потратил несколько дней на изучение этого вопроса, и кажется, что очень трудно добавить пользовательский код для входящего события электронной почты. И многие из способов сделать это будут просто проигнорированы, если 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 минут.

Не так гладко, как я надеялся, но подойдет.

Надеюсь, это поможет другим.

...