Имя: Пароль:
1C
1С v8
1С vs Exchange
0 Pandoch
 
09.04.19
16:50
Господа, пытаюсь настроить  интеграцию с Exchange посредством EWS.  Затык на данный момент тупо в попытке отправить запрос http к Ews. Есть опыт у кого нибудь? Есть сервер у клиента exchange, через веб клиент по паролю и логину тестовому подключилась, почту вижу, то есть логин и пароль рабочие.
допустим, адрес сервера Exchange - https://mobile.testserver.com
Пишу такой код:

ssl = Новый ЗащищенноеСоединениеOpenSSL();//т.к. HTTPS
    
    СерверEWS = "mobile.testserver.com";
    Логин = "[email protected]";
    Пароль = "Pass";
    Соединение = Новый HTTPСоединение(СерверEWS,443, Логин, Пароль,,20,ssl);
    
    РесурсНаСервере = "/EWS/Exchange.asmx";
    
    Заголовки = Новый Соответствие();
    Заголовки.Вставить("Content-Type", "text/xml;charset=UTF-8");        
    ЗапросHTTP = Новый HTTPЗапрос(РесурсНаСервере,Заголовки);
    
    Результат = Соединение.ОтправитьДляОбработки(ЗапросHTTP);

Хочу получить код ответа 200, не выходит. На данный момент возвращает статус 302. Типа как по другому адресу ресурс лежит. Пробовала из заголовка ответа другой адрес ресурса прописать - все равно 302. Тело ответа пустой, смотрела.  Что с этим 302 делать, подскажите? И если есть у кого примеры/ссылки по работе по Http с EWS - буду признательна!
1 ptiz
 
09.04.19
17:01
(0) ". Пробовала из заголовка ответа другой адрес ресурса прописать - все равно 302" - и что при этом в Location? Туда запрос отправляла?
2 Pandoch
 
09.04.19
17:28
(1) да, Location. там прописано было /My.policy. я указывала этот путь к ресурсу. то же самое. Что самое интересное, сейчас попробовала через COM то же самое сделать - вернул 200. Не понимаю, в чем разница. пути те же, причем путь к ресурсу прошел первичный.
3 Pandoch
 
09.04.19
17:29
COM - MSXML2.XMLHTTP
4 Вафель
 
09.04.19
17:40
302 - это же редирект.
смотри на какой адрес перебрасывает
5 Pandoch
 
09.04.19
17:44
(4) да, уже пробую делать второй http запрос с новым именем ресурса. Но все равно в ответе 302
6 Вафель
 
09.04.19
17:45
покажи заголовки ответа полностью
7 Pandoch
 
09.04.19
17:46
ssl = Новый ЗащищенноеСоединениеOpenSSL();//т.к. HTTPS
    хост = "mobile.test.com/";
    //Логин = "[email protected]";
    Логин = "[email protected]";
    Пароль = "Pass";
    Соединение = Новый HTTPСоединение(хост, 443, Логин, Пароль,,20,ssl,Ложь);
    
    РесурсНаСервере = "/EWS/Exchange.asmx";

    
    Заголовки = Новый Соответствие();
    Заголовки.Вставить("Content-Type", "text/xml;charset=UTF-8");    
    
    ЗапросHTTP = Новый HTTPЗапрос(РесурсНаСервере,Заголовки);

    strXML = "    <?xml version=""1.0"" encoding=""utf-8""?>
   |<soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"";
   |               xmlns:t=""http://schemas.microsoft.com/exchange/services/2006/types"">;
   |  <soap:Body>
   |    <FindItem xmlns=""http://schemas.microsoft.com/exchange/services/2006/messages"";
   |               xmlns:t=""http://schemas.microsoft.com/exchange/services/2006/types"";
   |    </FindItem>
   |  </soap:Body>
   |</soap:Envelope>
   |";

    ЗапросHTTP.УстановитьТелоИзСтроки(strXML,КодировкаТекста.UTF8);    
    Результат = Соединение.ОтправитьДляОбработки(ЗапросHTTP);
    
    РесурсНаСервере = "/my.policy.asmx";
        
    ЗапросHTTP = Новый HTTPЗапрос(РесурсНаСервере,Заголовки);
    ЗапросHTTP.УстановитьТелоИзСтроки(strXML,КодировкаТекста.UTF8);    
    Результат = Соединение.ОтправитьДляОбработки(ЗапросHTTP);
8 Pandoch
 
09.04.19
17:46
это текущий код
9 Вафель
 
09.04.19
17:46
заголовки ответа покажи, а не текущий код
10 Вафель
 
09.04.19
17:47
а почто вебсервисы не юзаешь?
11 Pandoch
 
09.04.19
17:49
12 Pandoch
 
09.04.19
17:49
(10) ну тип http говорят тут мне быстрее и надежнее. Я по заданию делаю)
13 Вафель
 
09.04.19
17:50
А если так?
РесурсНаСервере = "/my.policy";
14 Вафель
 
09.04.19
17:51
в браузере попробуй адрес забить
15 Pandoch
 
09.04.19
17:54
(13) пробовала
16 Cyberhawk
 
09.04.19
18:10
Почему ожидается что-то другое?
17 Вафель
 
09.04.19
18:14
(16) ну 302 то точно не должно быть. в конечном итоге адрес то верный должно подставить
18 Cyberhawk
 
09.04.19
18:22
(17) Я и спрашиваю, почему "302 то точно не должно быть"? Именно оно и должно быть.
19 Вафель
 
09.04.19
18:27
(18) почему оно должно быть?
20 Cyberhawk
 
10.04.19
08:28
(19) Потому что тямы у поставщика веб-сервиса (EWS) всяко побольше, чем у потребителя
21 dezss
 
10.04.19
08:44
Так при редиректе нужно еще и печеньки, которые вернулись, юзать, имхо.
22 dezss
 
10.04.19
08:44
(21) + там же сама сессия хранится)
23 Pandoch
 
10.04.19
12:11
так, ладно. через ком получила 200. Захотелось хотя бы через ком достать письма. код вот:

strXML = ПолучитьПисьмаСтрокаЗапроса2();
    
    стрURL="https://mobile.test.com/EWS/Exchange.asmx";;

    oXMLHTTP = Новый COMОбъект("MSXML2.XMLHTTP");
    oXMLHTTP.open("POST", стрURL, 0, "test", "Pass");    
    oXMLHTTP.setRequestHeader("Content-Type", "text/xml");    
    
    oXMLHTTP.send(strXML);    
    
    Если oXMLHTTP.Status=200 тогда
        xmlВыборкаMessage = oXMLHTTP.responseXML.SelectNodes("//t:Message");
        Для НомерПисьма = 1 По xmlВыборкаMessage.Length Цикл
            Письмо = xmlВыборкаMessage.item(НомерПисьма - 1);
            Прочитано = Письмо.SelectNodes("t:IsRead").item(0).text;
            Если Прочитано Тогда Продолжить; КонецЕсли;
            Тема = Письмо.SelectNodes("t:Subject").item(0).text;
            ItemId = Письмо.SelectNodes("t:ItemId").item(0);
            Id = ItemId.getAttribute("Id");
            ChangeKey = ItemId.getAttribute("ChangeKey");
            //.........................................
        КонецЦикла;
    КонецЕсли;


Писем нет!! (Length  = 0) хотя сижу на почте тестовой и вижу 5 писем. что не так делаю???
вот сам XML, вроде по стандарту все:

<?xml version="1.0" encoding="utf-8"?>    
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";;    
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages";;    
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">;;    
<soap:Body>    
    <m:FindItem Traversal="Shallow" xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">;    
        <m:ItemShape>    
            <t:BaseShape>Default</t:BaseShape>    
            <t:AdditionalProperties>    
                  <t:FieldURI FieldURI="item:DateTimeSent"/>    
            </t:AdditionalProperties>    
        </m:ItemShape>    
        <m:IndexedPageItemView MaxEntriesReturned="10" BasePoint="Beginning" Offset="0"/>    
        <m:Restriction>    
            <t:IsEqualTo>    
                <t:FieldURI FieldURI="message:IsRead"/>    
                    <t:FieldURIOrConstant>    
                         <t:Constant Value="false"/>    
                    </t:FieldURIOrConstant>    
            </t:IsEqualTo>    
        </m:Restriction>    
        <m:SortOrder>    
            <t:FieldOrder Order = "Ascending">
                <t:FieldURI FieldURI="item:DateTimeSent"/>    
            </t:FieldOrder>    
        </m:SortOrder>    
<m:ParentFolderIds><t:DistinguishedFolderId Id="inbox"/></m:ParentFolderIds></m:FindItem></soap:Body></soap:Envelope>
24 Pandoch
 
10.04.19
12:17
(21) какие печеньки?)
25 Mankubus
 
10.04.19
12:50
(0)
у меня вот так работает с одним из сайтов по https:
     ssl = Новый ЗащищенноеСоединениеOpenSSL(
            ,
            Новый СертификатыУдостоверяющихЦентровWindows());
(24) https://ru.wikipedia.org/wiki/Cookie
26 Pandoch
 
10.04.19
12:54
(25) это весь код?) или мне курить эту статью на вики
27 sqr4
 
10.04.19
12:55
(26) Наверно надо добавить Новый СертификатыУдостоверяющихЦентровWindows() в конструктор создания защищенного соединения
28 Mankubus
 
10.04.19
15:39
(26) нет не весь это нужно вставить вместо твоей первой строки из (0)
29 Pandoch
 
10.04.19
15:47
в общем решение, как обычно слишком просто оказалось... имя сервера надо было немного другое. Я эмпирическим путем чисто обнаружила это. XML и код - рабочие.
30 dezss
 
10.04.19
16:51
(24) set-cookie из заголовков ответа.
Но если и без них все обошлось, то хорошо)
31 Pandoch
 
11.04.19
12:09
так, новые сложности возникают) решила тут же продолжить вопросы писать. Получила письмо. Не могудокопаться до тела письма, собственно, т.к. мне нужно загрузить его в 1ску. В документации указано, что в message есть подчинен.элемент Body, но он не приходит в ответе, хотя текст письма есть по факту в аутлуке.
вот так выглядит то, что вернулось:

<?xml version="1.0" encoding="UTF-8"?>
<t:Message xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">;
   <t:ItemId Id="AAAYAHMxY21zLXRlc3RAcGFsZmluZ2VyLmNvbQBGAAAAAADuWzfjPcjrQpqiEAfeoifoBwCWjWwVOsniRo2PfQjTjw5sAAAAyj70AACWjWwVOsniRo2PfQjTjw5sAAAAypOdAAA=" ChangeKey="CQAAABYAAACWjWwVOsniRo2PfQjTjw5sAAAAypyP" />
   <t:ParentFolderId Id="AQAYAHMxY21zLXRlc3RAcGFsZmluZ2VyLmNvbQAuAAAD7ls34z3I60KaohAH3qIn6AEAlo1sFTrJ4kaNj30I048ObAAAAco+9AAAAA==" ChangeKey="AQAAAA==" />
   <t:ItemClass>IPM.Note</t:ItemClass>
   <t:Subject>WARNING ALERT: Fake e-mails / Fraudulent Payment Requests</t:Subject>
   <t:Sensitivity>Normal</t:Sensitivity>
   <t:DateTimeReceived>2019-04-09T15:51:24Z</t:DateTimeReceived>
   <t:Size>10629</t:Size>
   <t:Importance>High</t:Importance>
   <t:IsSubmitted>false</t:IsSubmitted>
   <t:IsDraft>false</t:IsDraft>
   <t:IsFromMe>false</t:IsFromMe>
   <t:IsResend>false</t:IsResend>
   <t:IsUnmodified>true</t:IsUnmodified>
   <t:DateTimeSent>2019-04-09T15:51:10Z</t:DateTimeSent>
   <t:DateTimeCreated>2019-04-09T15:51:24Z</t:DateTimeCreated>
   <t:ReminderIsSet>false</t:ReminderIsSet>
   <t:ReminderMinutesBeforeStart>0</t:ReminderMinutesBeforeStart>
   <t:DisplayCc />
   <t:DisplayTo>DL-PALFINGER-ALL-USERS; DL-PALSYS-ALLUSERS</t:DisplayTo>
   <t:HasAttachments>false</t:HasAttachments>
   <t:Culture>de-DE</t:Culture>
   <t:Sender>
      <t:Mailbox>
         <t:Name>Corp. Communications</t:Name>
      </t:Mailbox>
   </t:Sender>
   <t:IsReadReceiptRequested>false</t:IsReadReceiptRequested>
   <t:IsDeliveryReceiptRequested>false</t:IsDeliveryReceiptRequested>
   <t:ConversationIndex>AdTu65I+E9VtFYjLQGamfIjekWaNMg==</t:ConversationIndex>
   <t:ConversationTopic>WARNING ALERT: Fake e-mails / Fraudulent Payment Requests</t:ConversationTopic>
   <t:From>
      <t:Mailbox>
         <t:Name>Corp. Communications</t:Name>
      </t:Mailbox>
   </t:From>
   <t:InternetMessageId>&lt;DEB70E4F6DD8234E832A7AFE401213A5015AAE8E4B@satsbgexch01.palfinger.local&gt;</t:InternetMessageId>
   <t:IsRead>false</t:IsRead>
   <t:IsResponseRequested>false</t:IsResponseRequested>
</t:Message>

Может другим методом нужно получать содержимое письма? Не FindItem? Кто-то решал подобную задачу?
32 Pandoch
 
11.04.19
12:19
попробовала запросить эти свойства, добавив в xml запрос этих полей:
...
<t:AdditionalProperties>    
                  <t:FieldURI FieldURI="item:DateTimeSent"/>
                    <t:FieldURI FieldURI="item:TextBody" />
                <t:FieldURI FieldURI="item:Body" />
            </t:AdditionalProperties>    
...

ответ с сервера, типа ошибка запроса..
The request failed schema validation: The 'FieldURI' attribute is invalid - The value 'item:TextBody' is invalid according to its datatype 'http://schemas.microsoft.com/exchange/services/2006/types:UnindexedFieldURIType' - The Enumeration constraint failed.

+

The 'FieldURI' attribute is invalid - The value 'item:TextBody' is invalid according to its datatype 'http://schemas.microsoft.com/exchange/services/2006/types:UnindexedFieldURIType' - The Enumeration constraint failed.

шо не так?(
33 Pandoch
 
11.04.19
13:00
через метод GetItem по Айди и Ключу письма получилось.
34 Pandoch
 
15.04.19
16:54
Новый вопрос появился)
Изучила все атрибуты Message - нет явного атрибута, содержащего ИД письма - основания, то есть если это входящее письма, в ответ на какое-то наше исходящее, чтобы было ИД письма исходящего, чтобы я их связать смогла.

Кто работал к ексчендж, знаете? Может это отдельной функцией как-то запрашивается по ИД текущего письма?