Поделиться через


Импорт элементов с помощью веб-служб Exchange в Exchange

Узнайте, как импортировать встречи, сообщения электронной почты, контакты, задачи и другие элементы с помощью управляемого API EWS или EWS в Exchange.

Многие системы содержат встречи, сообщения электронной почты, контакты и задачи. Эти элементы можно импортировать в Exchange разными способами. Импорт элементов в Exchange прост, если связи почтовых ящиков не поддерживаются для этих элементов. Для создания элементов в почтовом ящике Exchange можно использовать метод Управляемого API EWS Item.Save или операцию CreateItem EWS. Однако простой подход не поддерживает все сценарии. Например:

  • Вы не можете поддерживать связь между организаторами и участниками при импорте встреч с участниками (собрания). Это означает, что организатору собрания потребуется повторно отправить приглашения на собрание участникам, чтобы восстановить отношения между организатором и участниками. Если встреча была импортирована в календарь участника, она не будет связана с встречей организатора собрания. Участники должны будут принять приглашение на собрание от организатора, чтобы восстановить отношения между организатором и участником.

  • Сведения о назначаемых не сохраняются при импорте назначенных задач.

Все параметры импорта можно использовать для пакетного импорта элементов в Exchange.

Использование управляемого API EWS или типов элементов EWS для импорта элемента

Управляемый API EWS или EWS можно использовать для импорта сообщений электронной почты, контактов, встреч или задач из других систем. Просто задайте свойства исходного формата для любого из следующих объектов в зависимости от импортируемых объектов.

Таблица 1. Объекты и элементы EWS Managed API EWS

Объект Управляемого API EWS Элемент EWS
EmailMessage
Сообщение
Contact
Contact
Встреча
CalendarItem
Задача
Задача

Используйте метод Управляемого API Item.Save EWS или операцию CreateItem EWS для импорта элементов. Мы рекомендуем этот подход при импорте элементов из других систем, так как у вас есть контроль над импортируемыми свойствами. Дополнительные сведения о настройке свойств элементов и последующем сохранении элемента см. в разделах Создание элемента с помощью управляемого API EWS или Создание элемента с помощью EWS.

Импорт элементов с полной точностью

Вы можете использовать операцию UploadItems EWS для отправки элемента в виде потока данных. Это представление потока данных элемента необходимо получить из результатов вызова операции ExportItems . Так как управляемый API EWS не реализует операцию UploadItems , при использовании управляемого API EWS необходимо написать подпрограмму для отправки веб-запросов.

Это самый простой способ импорта элементов, экспортированных с другого сервера Exchange Server.

В следующем примере идентификаторы и содержимое элемента Data сокращаются для удобства чтения.

<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/"
      xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
      xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2013_SP1"/>
  </soap:Header>
  <soap:Body>
    <m:UploadItems>
      <m:Items>
        <t:Item CreateAction="CreateNew">
          <t:ParentFolderId  Id="AAMkADEzOTE7kV0AAA=" ChangeKey="AQAAAA=="/>
          <t:Data>AQAAAAgAAAAAAQAAAAADABZADQASDkANABMO</t:Data>
        </t:Item>
      </m:Items>
    </m:UploadItems>
  </soap:Body>
</soap:Envelope>

Сервер отвечает на запрос UploadItems элементом UploadItemsResponse , который содержит значение элемента ResponseCodeNoError, указывающее, что элемент был успешно отправлен. Ответ также содержит идентификатор отправленного элемента.

Использование потока MIME для импорта из распространенных форматов файлов

EWS может импортировать ФАЙЛЫ EML (EML) и iCal (ICS). Вы захотите протестировать содержимое MIME, чтобы узнать, как средство синтаксического анализа EXCHANGE MIME обрабатывает содержимое потока MIME. Хотя использовать поток MIME удобно, обычно для импорта элемента лучше использовать управляемый API EWS или типы элементов EWS. Ниже приведен пример импорта vCard.

Использование управляемого API EWS для импорта электронной почты из EML-файла с помощью потока MIME

В следующем примере показано, как задать для свойства MimeContent содержимое EML-файла, а затем импортировать сообщение электронной почты в почтовый ящик. В этом примере также показано, как задать расширенное свойство PidTagMessageFlags (0x0E07) для импортированного сообщения электронной почты, чтобы оно не отображалось в почтовом ящике в качестве черновика элемента. В этом примере предполагается, что служба является действительным объектом ExchangeService, и что пользователь может пройти проверку подлинности на сервере Exchange Server.

private static void UploadMIMEEmail(ExchangeService service)
{
    EmailMessage email = new EmailMessage(service);
    
    string emlFileName = @"C:\import\email.eml";
    using (FileStream fs = new FileStream(emlFileName, FileMode.Open, FileAccess.Read))
    {
        byte[] bytes = new byte[fs.Length];
        int numBytesToRead = (int)fs.Length;
        int numBytesRead = 0;
        while (numBytesToRead > 0)
        {
            int n = fs.Read(bytes, numBytesRead, numBytesToRead);
            if (n == 0)
                break;
            numBytesRead += n;
            numBytesToRead -= n;
        }
        // Set the contents of the .eml file to the MimeContent property.
        email.MimeContent = new MimeContent("UTF-8", bytes);
    }
    
    // Indicate that this email is not a draft. Otherwise, the email will appear as a 
    // draft to clients.
    ExtendedPropertyDefinition PR_MESSAGE_FLAGS_msgflag_read = new ExtendedPropertyDefinition(3591, MapiPropertyType.Integer);
    email.SetExtendedProperty(PR_MESSAGE_FLAGS_msgflag_read, 1);
    // This results in a CreateItem call to EWS. The email will be saved in the Inbox folder.
    email.Save(WellKnownFolderName.Inbox);
}

Использование управляемого API EWS для импорта встречи из файла iCal с помощью потока MIME

Вы можете импортировать простые встречи в виде файлов iCalendar с помощью потока MIME. Вы не можете импортировать собрания, которые являются встречами с участниками, так как связь между организаторами и участниками собрания должна быть задана как часть рабочего процесса календаря Exchange . Участники не могут быть записаны в поток MIME.

В следующем примере кода показано, как импортировать простой ICS-файл в почтовый ящик пользователя.

private static void UploadMIMEAppointment(ExchangeService service)
{
    Appointment appointment = new Appointment(service);
    string iCalFileName = @"C:\import\appointment.ics";
    using (FileStream fs = new FileStream(iCalFileName, FileMode.Open, FileAccess.Read))
    {
        byte[] bytes = new byte[fs.Length];
        int numBytesToRead = (int)fs.Length;
        int numBytesRead = 0;
        while (numBytesToRead > 0)
        {
            int n = fs.Read(bytes, numBytesRead, numBytesToRead);
            if (n == 0)
                break;
            numBytesRead += n;
            numBytesToRead -= n;
        }
        // Set the contents of the .ics file to the MimeContent property.
        appointment.MimeContent = new MimeContent("UTF-8", bytes);
    }
    // This results in a CreateItem call to EWS. 
    appointment.Save(WellKnownFolderName.Calendar);
}

Использование EWS для импорта элемента с помощью потока MIME

Вы можете использовать операцию CreateItem EWS для импорта элементов EML и iCal с помощью потока MIME.

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/"
               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2013_SP1" />
    <t:MailboxCulture>en-US</t:MailboxCulture>
  </soap:Header>
  <soap:Body >
    <m:CreateItem>
      <m:SavedItemFolderId>
        <t:DistinguishedFolderId Id="inbox"/>
      </m:SavedItemFolderId> 
        <m:Items>
        <t:Message>
          <t:MimeContent CharacterSet="UTF-8">
            <!-- Insert MIME content here-->
          </t:MimeContent>
        </t:Message>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

Дальнейшие действия

После импорта элементов в почтовый ящик может потребоваться создать пользовательскую папку для хранения импортированных элементов или синхронизировать элементы клиента и почтового ящика.

См. также