none
Exchange 2003 и правила обработки сообщений RRS feed

  • Вопрос

  • доброго времени суток всем!

    возможно ли на Exchange 2003 делать правила подобные "Server-Wide Automated Processing Rules " в CommuniGate Pro?

    задача простая (по крайней мере в CommuniGate Pro делается легко!):
    каждое входящее в домен письмо проверяется на 2 условия:
    1. адрес отправителя,
    2. словосочетание в поле "Тема"
    при выполнении этих 2-х условий копия этого письма отправляется на внешний емайл.

    возможно ли настроить подобное в Exchange 2003 штатными средствами?

    что-то близкое к решению я нашел: создать правило сортировки в OWA 2003 в конкретном почтовом ящике для входящей в него почты, НО почему то по этому правилу сообщение не пересылается на внешний почтовый ящик. на локальный ящик - без проблем. странное дело...

    кто-нибудь сталкивался с такой задачей?

    • Перемещено Tina_Tian 19 марта 2012 г. 4:38 forum merge (От:Exchange Server 2003/2000/5.5)
    10 февраля 2007 г. 15:52

Ответы

  •  dim386 написано:

    1. адрес отправителя,
    2. словосочетание в поле "Тема"

    НО почему то по этому правилу сообщение не пересылается на внешний почтовый ящик. на локальный ящик - без проблем. странное дело...

    Сделайте серверное правило в аутлуке

    Чтобы сообщение пересылалось на внешний адрес - можете создать для него Контакт.

    10 февраля 2007 г. 21:10
  • Хм, Если правило при создании получается серверное - то вы можете пользоваться им где угодно и когда угодно. Однако в Office Outlook правило может получиться клиентским, и больше нигде, кроме как в этом аутлуке вы этим правилом воспользоваться не сможете, даже в owa.
    11 февраля 2007 г. 10:54
  • dim386, а чем Вам не нравиться офисный Outlook? Как уже было сказано, Вы просто создаёте в нём  серверное правило и всё, можете его выключить, а правило будет проверяться и отрабатываться на сервере. Чтобы не было указания в сообщении, что оно переслано, надо выбрать redirect (перенаправить) а не forward(переслать).
    12 февраля 2007 г. 6:23
  • На выполнение скрипта или приложения нельзя создать серверное правило, т.е. обрабатываться оно будет только в outlook. Мне кажется вполне возможным использовать проверку события на сервере, написать скрипт, и зарегить его соответственно,чтобы он проверял всю почту(правда только SMTP), или от определённых отправителей на наличие в subject определённого набора слов и в случае совпадения отписывать нужное письмо. Тренироваться естественно на кошках(virtual PC).
    14 февраля 2007 г. 8:31
  • Не могу дать прямых ссылок c msdn, не пущает и говорит

    Server is too busy

    Прредлагаю по поиску на microsoft по SMTP Event Sinks, ISMTPOnArrival.

    Могу предложить скрипт, для отправки письма

    Set objEmail = CreateObject("CDO.Message")
    objEmail.From = "user@domain.ru"
    objEmail.To = "sms@domain1.ru"
    objEmail.Subject = "subj"
    objEmail.Textbody = "blb-bla"
    objEmail.Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objEmail.Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
            "mail.domain.ru"
    objEmail.Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    objEmail.Configuration.Fields.Update
    objEmail.Send
    Set objEmail= nothing

     

    14 февраля 2007 г. 9:31
  • Под Вашу задачу нашёл очень похожий скрипт. Он проверяет наличие в теме письма слова VIRUS и прикреплённых файлов с расширением vbs. http://support.microsoft.com/kb/313404 кое-что убрал, что-то добавил. Называем скрипт SMTPEventSink.vbs

    <SCRIPT LANGUAGE="VBScript">

    Sub IEventIsCacheable_IsCacheable()
     
    End Sub

    Sub ISMTPOnArrival_OnArrival(ByVal Msg, EventStatus)
     
     If Instr(1, Msg.Subject, "VIRUS", 1) > 0 then
             Set objEmail = CreateObject("CDO.Message")
                    objEmail.From = "admin@domain.ru"
                    objEmail.To = "sms@domain.com"
                    objEmail.Subject ="Hello " 
                    objEmail.Textbody = "bla-bla"
                    objEmail.Send
                    Set objEmail= nothing 
      EventStatus = 0
     End If
    End Sub

    </SCRIPT>

    Чтобы зарегистрировать этот скрипт Вам понадобиться файл smtpreg.vbs http://msdn2.microsoft.com/en-us/library/ms528023.aspx

    SMTPEventSink.vbs и smtpreg.vbs я положил в корень диска C:\. Насколько я понял одно из условий, известный отправитель, например dude@exp.com.

    Соответственно регистрируем (имеется ввиду, что у нас один smtp virtual server)

    Cscript smtpreg.vbs /add 1 onarrival CheckSubject CDO.SS_SMTPOnArrivalSink "mail from=dude@exp.com"

    Cscript smtpreg.vbs /setprop 1 onarrival CheckSubject Sink ScriptName "C:\SMTPEventSink.vbs"

    При приёме письма от dude@exp.com запускается скрипт и проверяется поле тема, если обнаруживается слово VIRUS,тогда от имени admin@domain.ru отправляется сообщение получателю sms@domain.com.
    Важный момент! Обрабатываются только SMTP сообщения. http://support.microsoft.com/kb/273233/
    Я тестировал на VPC. Exchange 2003 server по схеме smtp virtual server1 --> smtp virtual server2.
    Как я уже говорил я не программер.Если решите воспользоваться, само собой на свой риск и страх.

    Если понадобиться отказаться от регистрации и вернуть всё обратно, тогда

    Cscript smtpreg.vbs /remove 1 onarrival CheckSubject

    Ещё материалы по теме. SMTP/NNTP Transport Events Sinks with CDO http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/b68966a8-32b0-4ff2-9c66-1eab9bf83587.asp


     

    15 февраля 2007 г. 8:10

Все ответы

  • штатных средств нет, но попробуйте создать рулс для этого почтового ящика, должно работать.
    10 февраля 2007 г. 20:40
  •  dim386 написано:

    1. адрес отправителя,
    2. словосочетание в поле "Тема"

    НО почему то по этому правилу сообщение не пересылается на внешний почтовый ящик. на локальный ящик - без проблем. странное дело...

    Сделайте серверное правило в аутлуке

    Чтобы сообщение пересылалось на внешний адрес - можете создать для него Контакт.

    10 февраля 2007 г. 21:10
  •  AlexBurlachenko_MCT написано:
    попробуйте создать рулс для этого почтового ящика, должно работать.

    через OWA не работает, даже если контакт создать в АД! а через Outlook не проверял.

    если в Outlooke настроить это правило, то оно будет работать когда этот почтовый клиент не будет запущен?

     

    и все равно интересно почему не работает это правило в OWA, может кто сказать?

    11 февраля 2007 г. 7:01
  •  AdminX_MCT написано:
     dim386 написано:

    1. адрес отправителя,
    2. словосочетание в поле "Тема"

    НО почему то по этому правилу сообщение не пересылается на внешний почтовый ящик. на локальный ящик - без проблем. странное дело...

    Сделайте серверное правило в аутлуке

    Чтобы сообщение пересылалось на внешний адрес - можете создать для него Контакт.

    у Outlooka и OWA разве не единые правила?

    11 февраля 2007 г. 7:05
  • Хм, Если правило при создании получается серверное - то вы можете пользоваться им где угодно и когда угодно. Однако в Office Outlook правило может получиться клиентским, и больше нигде, кроме как в этом аутлуке вы этим правилом воспользоваться не сможете, даже в owa.
    11 февраля 2007 г. 10:54
  • http://www2.skidmore.edu/it/students/forwardingrule.html

    тут расписано, что все должно работать:

    Forward it to: kyle.chenlee@yahoo.com

    у меня не работает... где же грабли...

    11 февраля 2007 г. 11:11
  • и еще вопрос.

    в теле пересланного по этому правилу сообщению добавляется текст, что оно было переслано.

    можно ли настроить чтобы этого не было?

    11 февраля 2007 г. 12:10
  • dim386, а чем Вам не нравиться офисный Outlook? Как уже было сказано, Вы просто создаёте в нём  серверное правило и всё, можете его выключить, а правило будет проверяться и отрабатываться на сервере. Чтобы не было указания в сообщении, что оно переслано, надо выбрать redirect (перенаправить) а не forward(переслать).
    12 февраля 2007 г. 6:23
  • все нравится! проблем с этим нет если перенаправлять на е-майл.

    проблема с доставкой перенаправленного сообщения возникает если адрес доставки - это емайл смс-центра сотового оператора.

    по причине большого размера!

    поясню задачу: при получении сообщения в конкретном ящике, которое удовлетворяет неким условиям(адрес отправителя и слова в поле "Тема") необходимо создать новое полноценное сообщение (с полями Return-Path, From, Tо, Subject и 2-ми предложениями в теле) и отправить определенному абоненту сотовой связи через СМС - центр. данное действие должно выполняться не однократно (как при применении шаблона ответа в Outlook!)

    пока не получается средствами Exchange....

    возможно тут помогут скрипты сервера (при создании правила, там есть действие - выполнить скрипт) - но тут нигде нет инфы!

    кто-нибудь мне поможет? :(

    14 февраля 2007 г. 7:06
  • На выполнение скрипта или приложения нельзя создать серверное правило, т.е. обрабатываться оно будет только в outlook. Мне кажется вполне возможным использовать проверку события на сервере, написать скрипт, и зарегить его соответственно,чтобы он проверял всю почту(правда только SMTP), или от определённых отправителей на наличие в subject определённого набора слов и в случае совпадения отписывать нужное письмо. Тренироваться естественно на кошках(virtual PC).
    14 февраля 2007 г. 8:31
  • а можно ссылку про скрипты для Exchange 2003 где можно почитать поподробнее?
    14 февраля 2007 г. 8:59
  • Не могу дать прямых ссылок c msdn, не пущает и говорит

    Server is too busy

    Прредлагаю по поиску на microsoft по SMTP Event Sinks, ISMTPOnArrival.

    Могу предложить скрипт, для отправки письма

    Set objEmail = CreateObject("CDO.Message")
    objEmail.From = "user@domain.ru"
    objEmail.To = "sms@domain1.ru"
    objEmail.Subject = "subj"
    objEmail.Textbody = "blb-bla"
    objEmail.Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objEmail.Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
            "mail.domain.ru"
    objEmail.Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    objEmail.Configuration.Fields.Update
    objEmail.Send
    Set objEmail= nothing

     

    14 февраля 2007 г. 9:31
  • а как скрипт запускать на автомате при возникновении определенного условия (скажем пришло нужное письмо!) ?
    14 февраля 2007 г. 9:38
  • dim386, в программировании я не силён, сам каждый раз мучаюсь :), так что в этом деле я не большой помощник. Так чтобы сейчас и работало, могу предложить левый вариант. На компе который постоянно работает, в терминальной сессии учётной записи на которуюю ожидается получение заветных сообщений, создать в outlook правило на запуск приложения, в нашем случае это скрипт приведённый выше и не закрывая outlook сделать disconnect. Только не устанавливайте outlook на Exchange Server. Повторяю, решение кривое, но работоспособное. Как временное можно попробовать.
    14 февраля 2007 г. 12:02
  • кривое решение не устраивает :)

    у самого такое есть - с помощью почтового сервера CGP это делается легко.

    но не хочется использовать лишнее звено в таком решении. нужно максимум надежности.

    14 февраля 2007 г. 14:43
  • Кое-что "накодил" :), завтра ещё  раз проверю и выложу. 

    14 февраля 2007 г. 17:03
  • Под Вашу задачу нашёл очень похожий скрипт. Он проверяет наличие в теме письма слова VIRUS и прикреплённых файлов с расширением vbs. http://support.microsoft.com/kb/313404 кое-что убрал, что-то добавил. Называем скрипт SMTPEventSink.vbs

    <SCRIPT LANGUAGE="VBScript">

    Sub IEventIsCacheable_IsCacheable()
     
    End Sub

    Sub ISMTPOnArrival_OnArrival(ByVal Msg, EventStatus)
     
     If Instr(1, Msg.Subject, "VIRUS", 1) > 0 then
             Set objEmail = CreateObject("CDO.Message")
                    objEmail.From = "admin@domain.ru"
                    objEmail.To = "sms@domain.com"
                    objEmail.Subject ="Hello " 
                    objEmail.Textbody = "bla-bla"
                    objEmail.Send
                    Set objEmail= nothing 
      EventStatus = 0
     End If
    End Sub

    </SCRIPT>

    Чтобы зарегистрировать этот скрипт Вам понадобиться файл smtpreg.vbs http://msdn2.microsoft.com/en-us/library/ms528023.aspx

    SMTPEventSink.vbs и smtpreg.vbs я положил в корень диска C:\. Насколько я понял одно из условий, известный отправитель, например dude@exp.com.

    Соответственно регистрируем (имеется ввиду, что у нас один smtp virtual server)

    Cscript smtpreg.vbs /add 1 onarrival CheckSubject CDO.SS_SMTPOnArrivalSink "mail from=dude@exp.com"

    Cscript smtpreg.vbs /setprop 1 onarrival CheckSubject Sink ScriptName "C:\SMTPEventSink.vbs"

    При приёме письма от dude@exp.com запускается скрипт и проверяется поле тема, если обнаруживается слово VIRUS,тогда от имени admin@domain.ru отправляется сообщение получателю sms@domain.com.
    Важный момент! Обрабатываются только SMTP сообщения. http://support.microsoft.com/kb/273233/
    Я тестировал на VPC. Exchange 2003 server по схеме smtp virtual server1 --> smtp virtual server2.
    Как я уже говорил я не программер.Если решите воспользоваться, само собой на свой риск и страх.

    Если понадобиться отказаться от регистрации и вернуть всё обратно, тогда

    Cscript smtpreg.vbs /remove 1 onarrival CheckSubject

    Ещё материалы по теме. SMTP/NNTP Transport Events Sinks with CDO http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/b68966a8-32b0-4ff2-9c66-1eab9bf83587.asp


     

    15 февраля 2007 г. 8:10
  • сильно :) тут действительно надо быть программистом :) громадное спасибо! буду пробовать :)

    почему же так сложно то :) а Вы не в курсе в Exchange 2007-м все также надо будет делать? или попроще?

    15 февраля 2007 г. 11:51
  • Про Exchange 2007 Server ничего не могу сказать, знания о нём весьма поверхностные. Но, на форуме есть немало участников, которые знают очень много об этом продукте, есть и MVP Exchange. Если кто из них заглянет в эту тему, думаю обязательно ответят на Ваш вопрос.
    15 февраля 2007 г. 12:14
  •  dim386 написано:

    сильно :) тут действительно надо быть программистом :) громадное спасибо! буду пробовать :)

    почему же так сложно то :) а Вы не в курсе в Exchange 2007-м все также надо будет делать? или попроще?

    Что-то проще, что то (по началу) сложнее ибо IIS с его моделью триггеров (sink) более не учавствует

    16 февраля 2007 г. 17:33
  • Well-wisher
    решил проверить решение задачи по частям,

    написал скрипт SendEmail.vbs:

    Sub SendEmail() 
    Set objEmail = CreateObject("CDO.Message")
    objEmail.From = "admin@domain.ru
    objEmail.To = "sms@domain.com
    objEmail.Subject ="Hello "  
    objEmail.Textbody = "bla-bla"
    objEmail.Send 
    Set objEmail= nothing  
    End Sub

    запускаю SendEmail.vbs на сервере с Exchange 2003 -ничего не происходит...

    что еще надо написать в скрипте?

    или как тогда отправить сообщение vbs-скриптом на сервере с Exchange 2003 ?

    3 марта 2007 г. 21:22
  • Это Sub SendEmail() и End Sub  надо убрать. В общем всё это есть в scriptcenter, отправка сообщений с помощью скриптов, с наличием SMTP службы и без неё. 

    Sending E-Mail from a Script http://www.microsoft.com/technet/scriptcenter/guide/sas_ent_wbpa.mspx?mfr=true

    Sending E-Mail Without Installing the SMTP Service http://www.microsoft.com/technet/scriptcenter/guide/sas_ent_wbpa.mspx?mfr=true

     

    5 марта 2007 г. 6:06