Имя: Пароль:
1C
1С v8
v8: 1C и MS Exchange Server
0 istekanov
 
15.10.13
16:10
Ситуация следующая имеется почтовый сервер: ms exchange server 2010, отключены поддержка imap, smtp и pop (их не включат).

Необходимо обрабатывать из 1С письма с почтового ящика exchange.

Хочу использовать EWS

http://msdn.microsoft.com/en-us/library/dd877045(v=exchg.140).aspx

   VKSOFT
05.12.12 - 18:13
Вот нашел пример для  c#
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
service.Credentials = new WebCredentials("user", "pass", "domain");

А сможет 1с так подключиться? Не пойму в какую сторону копать.

Есть еще пример с веб-сервисом может в его сторону копать

public static ExchangeServiceBinding GetBinding(
    String server,
    String domain,
    String user,
    String password)
{
    var esb = new ExchangeServiceBinding();
    // Указываем используемые креды

    esb.Credentials = new NetworkCredential(user, password, domain);
    // Задаем входную точку для EWS

    esb.Url = "https://"; + server + "/EWS/Exchange.asmx";

    esb.RequestServerVersionValue = new RequestServerVersion();
    // Указываем тип Exchange сервера

    // Для Exchange 2007 SP1 и 2010 подходит Exchange2007_SP1

    // Для Exchange 2007 без SP нужно указать Exchange2007

    esb.RequestServerVersionValue.Version = ExchangeVersionType.Exchange2007_SP1;
            
    return esb;
}

у кого какие соображения?

Тема уже была и никто внятно не ответил.
1 shuhard
 
15.10.13
16:14
(0)[Тема уже была и никто внятно не ответил.]
ссылки в студию,
ибо по связке 1С и  MAPI написано достаточно
2 istekanov
 
15.10.13
16:21
3 Infsams654
 
15.10.13
16:34
(0) а почему бы просто почту юзера не обработать? Зачем на ms exchange затачивать?
4 istekanov
 
15.10.13
16:35
(0) в частности пытаюсь в конфигураторе добавить WS-ссылку https://ххххххххх/ews/Services.wsdl
прохожу авторизацию и мне говорится :
"Неправильный путь к файлу 'messages.xsd'"
5 istekanov
 
15.10.13
16:36
Согласно статье на хабре http://habrahabr.ru/post/117268/
люди из С# успешно получают почту из exchange через ews.
6 Infsams654
 
15.10.13
16:42
(5) не против. Только exchange - это не все что есть в природе. Почта - она всемирна, а exchange - это только писк от ms
7 Infsams654
 
15.10.13
16:46
(4) не факт что 1С ws-ссылка это поймет. Скачай https://ххххххххх/ews/Services.wsdl, открой программно ws-определение из этого файла, открой по нему прокси и дерзай
8 istekanov
 
15.10.13
17:03
(7) можно пример?
Потому что
WSlink = Новый WSОпределения("https://хххххххх/ews/Services.wsdl";, "логин", "пароль", 5);

выдает ту же ошибку что и в (4).
9 Infsams654
 
15.10.13
17:07
(8) так  написал же в (7). Скачай wsdl. И из файла создавай WSОпределения
10 Jaap Vduul
 
15.10.13
17:08
Импортировать иксченджевый wsdl в 1цэ не получится.
Можете попробовать вручную лепить soap-конверты и отправлять их через xmlhttp.
11 Infsams654
 
15.10.13
17:09
(9)+ если что-то не понравится в файле, то оторректировать можно
12 Infsams654
 
15.10.13
17:10
(10) что значит не получиться? Открываешь в броузере https://ххххххххх/ews/Services.wsdl  и сохраняешь в xml
13 istekanov
 
15.10.13
17:11
Пробую так:

WSОпределение = Новый WSОпределения("https://xxxx/EWS/Exchange.asmx";, "user", "pass", 5);

Сервис= Новый WSПрокси(WSОпределение, "https://xxxx/EWS/Exchange.asmx";, "ExchangeServiceBinding", "ExchangeServicePortType");

Выдает {Форма.Форма.Форма(97)}: Ошибка при вызове конструктора (WSПрокси)
    Сервис= Новый WSПрокси(WSОпределение, "https://xxxxxx/EWS/Exchange.asmx";, "ExchangeServiceBinding", "ExchangeServicePortType");
по причине:
Сервис не найден. {https://xxxxx/EWS/Exchange.asmx}:ExchangeServiceBinding

Где взять правильный 3 параметр функции Новый WSПрокси(..
14 Jaap Vduul
 
15.10.13
17:11
(11)
Можете не терять напрасно время.
15 Infsams654
 
15.10.13
17:12
(10) через xmlhttp - флаг в руки. Я за. Только это отменяет всю жесть веб-сервисов.
16 Jaap Vduul
 
15.10.13
17:12
(12)
1цэ в итоге скажет "Неверный формат". И всё.
17 Infsams654
 
15.10.13
17:13
(14) а почему ?
18 Infsams654
 
15.10.13
17:14
(16) нифига, проверено
19 istekanov
 
15.10.13
17:14
(10) А вот отсюда можно подробнее???
1. Почему не получится? Проблема в самой 1С?
2. Можно пример пары пакетов "вручную лепить soap-конверты и отправлять их через xmlhttp"?
20 Jaap Vduul
 
15.10.13
17:15
(18)Что проверено?
У вас получилось Services.wsdl импортировать в 1цэ?
21 Infsams654
 
15.10.13
17:21
(20) да, а что тут такого.
Новый WSОпределения(<МестоположениеWSDL>, <ИмяПользователя>, <Пароль>, <Таймаут>)

Описание:
Создает определение веб-сервисов из WSDL файла.
22 Jaap Vduul
 
15.10.13
17:21
(19)
1) Да, проблема в 1цэ. Даже если вы ей подсунете Messages.xsd (и ещё вроде Types.xsd надо) - см. (16)
2) забейте в поиске soap xmlhttp
23 Jaap Vduul
 
15.10.13
17:22
(21) см. (16)
24 Infsams654
 
15.10.13
17:26
(23) а, ну это да. Ну и это решаемо
25 Jaap Vduul
 
15.10.13
17:26
+22
Примеры самих пакетов см. в msdn
http://msdn.microsoft.com/en-us/library/dd633696(v=exchg.80).aspx
26 istekanov
 
16.10.13
16:07
(25)
Спасибо огромное. Уже научился так читать новые письма.
Осталось научиться читать вложения и высылать письма с вложениями. Как закончу выложу куски кода.
27 Новиков
 
16.10.13
16:11
Как научишься отправлять письма с сохранением в папке "Отправленные" пользовательского аутлука, тоже выложи кусочек кода :)
28 istekanov
 
24.10.13
12:42
Начинаю постить куски кода, даже возникла идея сделать платную обработку. )))
Кому чего не понятно пишите.

Это я читаю новые письма отсортированные с первого по последнее по дате отправки:
    strXML =
    "<?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"">
    |        <m:ItemShape>
    |            <t:BaseShape>Default</t:BaseShape>
    //|            <t:BaseShape>IdOnly</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:FieldOrder Order = ""Descending"">
    |                <t:FieldURI FieldURI=""item:DateTimeSent""/>
    |            </t:FieldOrder>
    |        </m:SortOrder>
    |";
    
    strSearch = "";
    Если strSearch <> "" Тогда
        strXML = strXML +
        "<m:Restriction>" +
        "    <t:Contains ContainmentComparison=""IgnoreCase"" ContainmentMode=""Substring"">" +
        "        <t:FieldURI FieldURI=""item:Subject"" />" +
        "        <t:Constant Value=""" + strSearch + """/>" +
        "    </t:Contains>" +
        "</m:Restriction>";
    КонецЕсли;
    
    strXML = strXML +
        "<m:ParentFolderIds>" +
        "<t:DistinguishedFolderId Id=""inbox"">";
        
    strEmail = "";    
    Если strEmail <> "" Тогда
        strXML = strXML + "<t:Mailbox><t:EmailAddress>" + strEmail + "</t:EmailAddress></t:Mailbox>";
    КонецЕсли;

        strXML = strXML +
            "</t:DistinguishedFolderId>" +
            "</m:ParentFolderIds>" +
            "</m:FindItem>" +
            "</soap:Body>" +
            "</soap:Envelope>";
    
    
    oXMLHTTP = СоздатьXMLHTTP();
    //oXMLHTTP.setRequestHeader("Depth", "0");
    //oXMLHTTP.setRequestHeader("SOAPAction", "http://webservices.belavia.by/GetAirportsList";);
    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");
            
            // получаем и распаковываем вложение
            Status = ПолучитьВложение(Id, ChangeKey);
            Если Status = 200 тогда
                // вложения получили успешно
            Иначе
                // вложения не получили, письмо оставляем не прочтенным
                Продолжить;
            КонецЕсли;
            
            // делаем письмо прочитанным
            // ***********
            Status = УстановитьОтметкуОПрочтении(Id, ChangeKey);
            Если Status = 200 тогда
                // письму успешно установлен флаг о прочтении
            КонецЕсли;
            // ***********
            
        КонецЦикла;
        
    КонецЕсли;
30 istekanov
 
24.10.13
12:51
Функция СоздатьXMLHTTP()
    
    стрURL="https://ваш почтовый сервер/EWS/Exchange.asmx";
    oXMLHTTP = Новый COMОбъект("MSXML2.XMLHTTP");
    oXMLHTTP.open("POST", стрURL, 0, "имя пользака, если нужно, то с доменом", "пароль пользака");
    oXMLHTTP.setRequestHeader("Content-Type", "text/xml");    
    
    Возврат oXMLHTTP;
    
КонецФункции
31 istekanov
 
24.10.13
12:53
А здесь я получаю вложения по Ид письма:


&НаСервере
Функция ПолучитьВложение(Id, ChangeKey)
    
    // Получаем Id вложений
    
    strXML =
    "<?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:GetItem>
    |        <m:ItemShape>
    |            <t:BaseShape>IdOnly</t:BaseShape>
    |            <t:AdditionalProperties>
    |                  <t:FieldURI FieldURI=""item:Attachments""/>
    |            </t:AdditionalProperties>
    |        </m:ItemShape>
    |        <m:ItemIds>
    |            <t:ItemId Id="""+Id+""" ChangeKey="""+ChangeKey+"""/>
    |        </m:ItemIds>
    |    </m:GetItem>
    |</soap:Body>
    |</soap:Envelope>
    |";
        
    oXMLHTTP_Вложения = СоздатьXMLHTTP();
    oXMLHTTP_Вложения.send(strXML);
    
    Если oXMLHTTP_Вложения.Status=200 тогда
        
        xmlВыборкаAttachments = oXMLHTTP_Вложения.responseXML.SelectNodes("//t:Attachments");
        
        Для НомерВложения=1 По xmlВыборкаAttachments.Length Цикл
            
            Вложение = xmlВыборкаAttachments.item(НомерВложения-1);
            Вложение = Вложение.SelectNodes("t:FileAttachment").item(0);
            
            AttachmentId = Вложение.SelectNodes("t:AttachmentId").item(0).getAttribute("Id");
            Name         = Вложение.SelectNodes("t:Name").item(0).text;
            
            ЗагрузитьВложениеССервера(AttachmentId);
            
        КонецЦикла;
    КонецЕсли;
    
    Возврат oXMLHTTP_Вложения.Status;
    
КонецФункции
32 istekanov
 
24.10.13
12:54
Эта процедура загружает вложения, сохраняет на диск, распаковывает и выкладывает в папку ПутьФайлаДляСохранения

&НаСервере
Функция ЗагрузитьВложениеССервера(AttachmentId)
    
    //  при помощи функции GetAttachment получим по Id вложения сам файл вложения
    strXML =
    "<?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:GetAttachment>
    |        <m:AttachmentShape/>
    |        <m:AttachmentIds>
    |            <t:AttachmentId  Id="""+AttachmentId+"""/>
    |        </m:AttachmentIds>
    |    </m:GetAttachment>
    |</soap:Body>
    |</soap:Envelope>
    |";
        
    oXMLHTTP_Вложения = СоздатьXMLHTTP();
    oXMLHTTP_Вложения.send(strXML);
    
    Если oXMLHTTP_Вложения.Status=200 тогда
        
        xmlВыборкаAttachments = oXMLHTTP_Вложения.responseXML.SelectNodes("//m:Attachments");
        
        Для НомерВложения=1 По xmlВыборкаAttachments.Length Цикл
            
            Вложение = xmlВыборкаAttachments.item(НомерВложения-1);
            Вложение = Вложение.SelectNodes("t:FileAttachment").item(0);
            
            Name    = Вложение.SelectNodes("t:Name").item(0).text;
            Content = Вложение.SelectNodes("t:Content").item(0).text;
            
            ДвоичныеДанные = Base64Значение(Content);
            ДвоичныеДанные.Записать(ПутьФайлаДляСохранения+Name);
            
            ВременныйФайл = Новый Файл(ПутьФайлаДляСохранения+Name);
            Если ВременныйФайл.Расширение = ".zip" Тогда
                // распакуем файл
                ВременныйФайл = Новый ЧтениеZipФайла(ПутьФайлаДляСохранения+Name);
                ВременныйФайл.ИзвлечьВсе(ПутьФайлаДляСохранения);
            КонецЕсли;
            
        КонецЦикла;
        
    КонецЕсли;
    
    Возврат "";
            
КонецФункции
33 istekanov
 
24.10.13
12:56
И не забываем установить отметку о прочтении:


&НаСервере
Функция УстановитьОтметкуОПрочтении(Id, ChangeKey)
    
    strXML =
    "<?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:UpdateItem MessageDisposition=""SaveOnly"" ConflictResolution=""AutoResolve"">
    |            <m:ItemChanges>
    |                <t:ItemChange>
    |                      <t:ItemId Id="""+Id+""" ChangeKey="""+ChangeKey+"""/>
    |                      <t:Updates>
    |                        <t:SetItemField>
    |                              <t:FieldURI FieldURI=""message:IsRead""/>
    |                            <t:Message>
    |                                <t:IsRead>true</t:IsRead>
    |                              </t:Message>
    |                        </t:SetItemField>
    |                    </t:Updates>
    |                </t:ItemChange>
    |            </m:ItemChanges>
    |        </m:UpdateItem>
    |    </soap:Body>
    |</soap:Envelope>
    |";
    
    oXMLHTTP_Обновление = СоздатьXMLHTTP();
    oXMLHTTP_Обновление.send(strXML);
    
    Возврат oXMLHTTP_Обновление.Status;
    
КонецФункции
34 istekanov
 
24.10.13
13:02
Теперь давайте отошлем письмо со вложением. Нашел пока 1 рабочий способ:
1. создаем письмо и сохраняем его в черновиках
2. создаем прикрепление к письму и не забываем что поменялся RootItemChangeKey у письма когда оно повторно сохраняется со вложением.
3. ну и отсылаем письмо с ключиком SaveItemToFolder=""true"", который помогает сохраниться письму в папке отправленые.
Ну а теперь немного кода:

    // Проверим что файл есть на диске, если его нет, тогда отменим отсылку письма
    Файл = Новый Файл(ПутьФайлаДляСохранения + ИмяФайлаДляОтправки + ".xml");
    Если Не Файл.Существует() Тогда
        СообщениеПользователю = Новый СообщениеПользователю();
        СообщениеПользователю.Текст = "Не найден файл обмена для отсылки: "+Файл.ПолноеИмя;
        СообщениеПользователю.Сообщить();
        Возврат;
    КонецЕсли;
    
    // Упакуем файл
    ЗаписьZipФайла = Новый ЗаписьZipФайла();
    ЗаписьZipФайла.Открыть(ПутьФайлаДляСохранения + ИмяФайлаДляОтправки + ".zip",,, МетодСжатияZIP.Сжатие, УровеньСжатияZIP.Оптимальный, МетодШифрованияZIP.Zip20);
    ЗаписьZipФайла.Добавить(ПутьФайлаДляСохранения + ИмяФайлаДляОтправки + ".xml");
    ЗаписьZipФайла.Записать();
    
    // Сформируем Base64-encoded содержимое файла вложения.
    ДвоичныеДанные = Новый ДвоичныеДанные(ПутьФайлаДляСохранения + ИмяФайлаДляОтправки + ".zip");
    Вложение = Base64Строка(ДвоичныеДанные);
    
    // создадим письмо и сохраним его в черновиках, чтобы прикрепить к нему файл
    ДанныеПисьма = СоздатьНовоеПисьмоВЧерновиках();
    Если ДанныеПисьма = Ложь Тогда
        // письмо не создано. Ошибка
        СообщениеПользователю = Новый СообщениеПользователю();
        СообщениеПользователю.Текст = "Ошибка создания письма в черновиках.";
        СообщениеПользователю.Сообщить();
        Возврат;
    КонецЕсли;
    
    // Создадим прикрепление к созданному письму
    ДанныеПисьмаСПрикреплением = СоздатьПрикреплениеКПисьму(ДанныеПисьма, Вложение);
    Если ДанныеПисьмаСПрикреплением = Ложь Тогда
        // Прикрепление не создано. Ошибка
        СообщениеПользователю = Новый СообщениеПользователю();
        СообщениеПользователю.Текст = "Ошибка создания прикрепления к письму в черновиках.";
        СообщениеПользователю.Сообщить();
        Возврат;
    КонецЕсли;
    
    // Отправим сохраненное письмо
    Результат = ОтправитьПисьмоИзЧерновиков(ДанныеПисьма);    
    Если Результат = Ложь Тогда
        // Сообщение не отправлено
        СообщениеПользователю = Новый СообщениеПользователю();
        СообщениеПользователю.Текст = "Ошибка отправления сообщения с прикреплением.";
        СообщениеПользователю.Сообщить();
        Возврат;
    КонецЕсли;
35 istekanov
 
24.10.13
13:02
1. создаем письмо и сохраняем его в черновиках



Функция СоздатьНовоеПисьмоВЧерновиках()
    
    ReplyTo      = "scm-support@nekgroup.com";
    ToRecipients = "scm-auto-test@nekgroup.com";
    
    strXML =
    "<?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:CreateItem MessageDisposition=""SendAndSaveCopy"">
    |    <m:CreateItem MessageDisposition=""SaveOnly"">
    |        <m:SavedItemFolderId>
    //|            <t:DistinguishedFolderId Id=""sentitems"" />
    |            <t:DistinguishedFolderId Id=""drafts"" />
    |        </m:SavedItemFolderId>
    |        <m:Items>
    |            <t:Message>
    |                <t:ItemClass>IPM.Note</t:ItemClass>
    |                <t:Subject>[Leg7 Reports] from NEK</t:Subject>
    |                <t:Body BodyType=""Text"">[Leg7 Reports] from NEK</t:Body>
    |                <t:ToRecipients>
    |                    <t:Mailbox>
    |                        <t:EmailAddress>"+ToRecipients+"</t:EmailAddress>
    |                    </t:Mailbox>
    |                </t:ToRecipients>
    |                <t:IsRead>false</t:IsRead>
    |                <t:ReplyTo>
    |                    <t:Mailbox>
    |                        <t:EmailAddress>"+ReplyTo+"</t:EmailAddress>
    |                    </t:Mailbox>
    |                </t:ReplyTo>
    |            </t:Message>
    |        </m:Items>
    |    </m:CreateItem>
    |</soap:Body>
    |</soap:Envelope>";
    
    oXMLHTTP = СоздатьXMLHTTP();
    oXMLHTTP.send(strXML);
    
    Если oXMLHTTP.Status=200 тогда
        // Успешное сохранение
        xmlВыборкаMessage = oXMLHTTP.responseXML.SelectNodes("//t:Message");
        
        // Писем должно быть 1, поэтому получаем первое
        Для НомерПисьма=1 По xmlВыборкаMessage.Length Цикл
            Письмо = xmlВыборкаMessage.item(НомерПисьма-1);
            ItemId = Письмо.SelectNodes("t:ItemId").item(0);
            
            Id = ItemId.getAttribute("Id");
            ChangeKey = ItemId.getAttribute("ChangeKey");
            
            ДанныеПисьма = Новый Структура;
            ДанныеПисьма.Вставить("Id",        Id);
            ДанныеПисьма.Вставить("ChangeKey", ChangeKey);
            // возвращаем ИД письма и ключа изменения
            Возврат ДанныеПисьма;
        КонецЦикла;
        // Что-то пошло не так
        Возврат Ложь;
    Иначе
        // Неудачное сохранение
        Возврат Ложь;
    КонецЕсли;
    
КонецФункции
36 istekanov
 
24.10.13
13:03
2. создаем прикрепление к письму и не забываем что поменялся RootItemChangeKey у письма когда оно повторно сохраняется со вложением.

Функция СоздатьПрикреплениеКПисьму(ДанныеПисьма, Вложение)
    
    ReplyTo      = "scm-support@nekgroup.com";
    ToRecipients = "scm-auto-test@nekgroup.com";
    
    strXML =
    "<?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:CreateAttachment>
    |        <m:ParentItemId Id="""+ДанныеПисьма.Id+"""/>
    |        <m:Attachments>
    |            <t:FileAttachment>
    |                <t:Name>"+ИмяФайлаДляОтправки+".zip"+"</t:Name>
    //|                <ContentType/>
    //|<ContentId/>
    //|<ContentLocation/>
    //|<Size/>
    //|<LastModifiedTime/>
    //|<IsInline/>
    //|<IsContactPhoto/>
    |                <t:Content>"+Вложение+"</t:Content>
    |            </t:FileAttachment>
    |        </m:Attachments>
    |    </m:CreateAttachment >
    |</soap:Body>
    |</soap:Envelope>";
    
    oXMLHTTP = СоздатьXMLHTTP();
    oXMLHTTP.send(strXML);
    
    Если oXMLHTTP.Status=200 тогда
        // Успешное прикрепление
        xmlВыборкаMessage = oXMLHTTP.responseXML.SelectNodes("//m:ResponseMessages");
        
        // Писем должно быть 1, поэтому получаем первое
        Для НомерПисьма=1 По xmlВыборкаMessage.Length Цикл
            Письмо = xmlВыборкаMessage.item(НомерПисьма-1);

            CreateAttachmentResponseMessage = Письмо.SelectNodes("m:CreateAttachmentResponseMessage").item(0);
            Ответ = CreateAttachmentResponseMessage.getAttribute("ResponseClass");  
            Если Ответ = "Success" Тогда
                // Вложение создано успешно
                Attachment = CreateAttachmentResponseMessage.SelectNodes("//m:Attachments").item(0);
                FileAttachment = Attachment.SelectNodes("t:FileAttachment").item(0);
                AttachmentId = FileAttachment.SelectNodes("t:AttachmentId").item(0);

                RootItemChangeKey = AttachmentId.getAttribute("RootItemChangeKey");
                
                // Изменим Ключ текущих данных письма. Он изменился, так как мы добавили письму вложение
                ДанныеПисьма.ChangeKey = RootItemChangeKey;
                Возврат Истина;
            Иначе
                Возврат Ложь;
            КонецЕсли;
        КонецЦикла;
        // Что-то пошло не так
        Возврат Истина;
    Иначе
        // Неудачное прикрепление
        Возврат Ложь;
    КонецЕсли;
    
КонецФункции
37 istekanov
 
24.10.13
13:04
3. ну и отсылаем письмо с ключиком SaveItemToFolder=""true"", который помогает сохраниться письму в папке отправленые.

Функция ОтправитьПисьмоИзЧерновиков(ДанныеПисьма)
    
    ReplyTo      = "scm-support@nekgroup.com";
    ToRecipients = "scm-auto-test@nekgroup.com";
    
    strXML =
    "<?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:SendItem SaveItemToFolder=""true"">
    
    |        <m:ItemIds>
    |            <t:ItemId Id="""+ДанныеПисьма.Id+""" ChangeKey="""+ДанныеПисьма.ChangeKey+"""/>
    |        </m:ItemIds>
    
    |        <m:SavedItemFolderId>
    |            <t:DistinguishedFolderId Id=""sentitems"" />
    |        </m:SavedItemFolderId>
    |    </m:SendItem>
    |</soap:Body>
    |</soap:Envelope>";
    
    oXMLHTTP = СоздатьXMLHTTP();
    oXMLHTTP.send(strXML);
    
    Если oXMLHTTP.Status=200 тогда
        // Успешное сохранение
        xmlВыборкаMessage = oXMLHTTP.responseXML.SelectNodes("//m:ResponseMessages");
        
        // Писем должно быть 1, поэтому получаем первое
        Для НомерПисьма=1 По xmlВыборкаMessage.Length Цикл
            Письмо = xmlВыборкаMessage.item(НомерПисьма-1);
            SendItemResponseMessage = Письмо.SelectNodes("m:SendItemResponseMessage").item(0);
            
            ResponceClass = SendItemResponseMessage.getAttribute("ResponseClass");
            Если ResponceClass = "Error" Тогда
                // Письмо почему-то не отправилось
                Возврат Ложь;
            КонецЕсли;
            // Ваууу письмо создалось, прикрепилось и ушло!!! Странно, наверное я что-то сделал не так, обратитесь к разработчику и он придумает новый глюк
            Возврат Истина;
        КонецЦикла;
        // Что-то пошло не так
        Возврат Ложь;
    Иначе
        // Неудачное сохранение
        Возврат Ложь;
    КонецЕсли;
    
КонецФункции
38 istekanov
 
24.10.13
13:08
(27), см. посты (34), (35), (36), (37).

Всем кто помог мне советами и ссылками еще раз огромное спасибо. MSDN все таки рулит ))).
39 katc
 
24.10.13
14:16
strEmail = "";    
    Если strEmail <> "" Тогда
        strXML = strXML + "<t:Mailbox><t:EmailAddress>" + strEmail + "</t:EmailAddress></t:Mailbox>";
    КонецЕсли;
как то по индусски
40 istekanov
 
24.10.13
16:20
(39)
Это затычка на будущее чтобы опять не тратить время на поиски.

Если не понятно, то вместо

strEmail = "";

нужно вписать

strEmail = "емэйл для отбора";

и тогда будет получаться почта с фильтром по емэйлу.