PowerShell Call Web Service на новом событии электронной почты (Exchange 2010)

StackOverflow https://stackoverflow.com/questions/2819735

Вопрос

У меня 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 минут.

Не так слад, как я надеялся, но это будет делать.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top