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


Руководство по функции Outlook 2007 “мобильная связь” (часть 1 из 3)

Автор:

  • Пол Шен (Paul Shen), Бин Хи (Bing He), Йонг Цанг (Yong Zhang), Джуди Цанг (Judy Zhang), Корпорация Майкрософт

Опубликовано: Февраль 2007 года

Продукты и технологии: Microsoft Office Outlook 2007

Статья посвящена тому, как создавать и размещать веб-службы для нужд функции Microsoft Office Outlook 2007 “мобильная связь”. Дается описание архитектуры и обмена сообщениями, а также описываются коммуникационные протоколы, используемые для связи между OMS-клиентами и веб-службами.

Оригинал статьи (EN)

На этой странице…

Функция Outlook “мобильная связь” Функция Outlook “мобильная связь”
Архитектура и передача сообщений Архитектура и передача сообщений
Коммуникационные протоколы Коммуникационные протоколы
Упаковка входящих мобильных сообщений Упаковка входящих мобильных сообщений
Заключение Заключение
Дополнительные источники Дополнительные источники

Функция Outlook “мобильная связь”

Функция Microsoft Office Outlook 2007 Mobile Service – “мобильная связь” – новый компонент для обмена сообщениями и диспетчер личных данных (PIM), разработанный для Microsoft Office Outlook 2007. Она призвана сделать Outlook лучшим инструментом для обмена мобильными сообщениями и уведомлениями. С ее помощью становится возможным без труда связать в одно целое мобильные средства Outlook и сами мобильные устройства.

В число возможностей, предоставляемые функцией “мобильная связь” входит:

  • составление новых текстовых и мультимедийных сообщений в Outlook;
  • пересылка элементов Outlook (включая сообщения электронной почты, встречи и контакты) в качестве текстовых или мультимедийных сообщений;
  • получение ответов с мобильных устройств и двусторонняя связь между Outlook и мобильными телефонами.

Возможности по переадресации, предоставляемые функцией, позволяют не только составлять и отправлять текстовые и мультимедийные сообщения из Outlook, но и автоматически перенаправлять напоминания, расписание на следующий день и сообщения электронной почты на мобильный телефон, задав простые условия. Кроме того, можно отправлять на мобильные телефоны и другие электронные адреса сообщения электронной почты, встречи и приглашения на собрание.

Функция “мобильная связь” интегрируется в настройки учетной записи Outlook, позволяя легко управлять учетными записями мобильных сообщений одновременно с учетными записями электронной почты. Номера мобильных телефонов рассматриваются как адреса, так что указывать получателей сообщения можно, как используя автозаполнение, так и выбирая имена из адресной книги Outlook. Кроме того, можно хранить мобильные сообщения в папках Outlook и обрабатывать их.

Клиент функции “мобильная связь” (OMS-клиент), встроенный в Outlook, посылает текстовые и мультимедийные сообщения веб-службе, созданной и размещенной у компании-партнера, предоставляющей линии связи или услуги по доставке мобильных сообщений. Эта веб-служба затем доставляет сообщение в центр обслуживания текстовых или мультимедийных сообщений нужного оператора.

Это первая из трех статей, содержащая введение в функцию “мобильная связь”, а также руководства и справочную информацию о работе с ней. Рекомендации по реализации веб-службы OMS см. в Руководстве по функции Outlook 2007 “мобильная связь” (часть 2 из 3). Сведения о XML-схеме для данных, передаваемых между веб-поставщиками OMS и OMS-клиентами, см. в Руководстве по функции Outlook 2007 “мобильная связь” (часть 3 из 3).

Архитектура и передача сообщений

В целом архитектура функции “мобильная связь” представляет собой клиентскую часть для работы со службами, а именно, с веб-службами. Клиент службы OMS, встроенный в Outlook, кодирует мобильное сообщение в формате SOAP и посылает его веб-службе OMS, которая кодирует его и доставляет в шлюз мобильных сообщений нужного оператора. Затем по сетям передачи мобильной связи сообщение доставляется на мобильный телефон пользователя. Веб-служба OMS создается и размещается у поставщика услуг, в роли которого выступает либо оператор мобильной связи, либо агрегатор (поставщик содержимого Интернета, поставщик услуг Интернета или любая сторона, способная предоставлять услуги мобильных сообщений). Спецификации веб-службы OMS и коммуникационные протоколы связи между нею и OMS-клиентами описаны в разделе Коммуникационные протоколы далее в этой статье.

Сообщения передаются в обе стороны между Outlook и мобильным телефоном получателя посредством веб-службы OMS и транспортной инфраструктуры, как показано на рис. 1. Доставка ответов с мобильного телефона выполняется по выбору пользователя в папку “Входящие” программы Outlook, на его мобильное устройство или по обоим адресам. Для доставки ответов в папку “Входящие” в Outlook поставщик услуг упаковывает их в SMTP-сообщения электронной почты в соответствии со спецификациями, определенными корпорацией Майкрософт (см. раздел Упаковка входящих мобильных сообщений настоящей статьи).

Рис. 1. Передача сообщений с использованием функции Outlook “мобильная связь”

Коммуникационные протоколы

При разработке веб-службы OMS необходимо следовать ряду правил. Во-первых, веб-служба должна соответствовать языку описания веб-служб (Web Services Description Language, WSDL). Это позволит OMS-клиентам подключаться к ней без необходимости вносить специальные изменения в код.

Во-вторых, веб-служба должна поддерживать следующие веб-методы:

  • string GetServiceInfo() – используется для получения свойств веб-службы OMS.
  • string GetUserInfo(string xmsUser) – используется для получения информации о пользователе.
  • string SendXms(string xmsData) - используется для отправки мобильных сообщений веб-службе.

В-третьих, веб-служба OMS должна соответствовать руководству по отправке мобильных сообщений в форме сообщений электронной почты, приведенном в разделе Упаковка входящих мобильных сообщений настоящей статьи.

Пример реализации простой веб-службы

Следующий код представляет собой набросок упрощенной реализации веб-службы OMS. Методы GetUserInfo() и GetServiceInfo() возвращают необходимую информацию и код ошибки. И то, и другое хранится в форме XML-файлов. В примере предполагается, что уже создан метод LoadXmlFromFile(string filename), который загружает XML из файла и возвращает результат в виде строки, а также что уже реализован закрытый класс CUserLogon, проверяющий допустимость текущего пользователя.

[WebService(Namespace="https://schemas.microsoft.com/office/Outlook/2006/OMS")]///<Don't change the namespace!/>
public class OMSService : System.Web.Services.WebService
{
/// <Get service information, such as the capacities of supported services./>
[System.Web.Services.WebMethodAttribute()]
[System.Web.Services.Protocols.SoapRpcMethodAttribute("https://schemas.microsoft.com/office/Outlook/2006/OMS/GetServiceInfo",
RequestNamespace="https://schemas.microsoft.com/office/Outlook/2006/OMS",
ResponseNamespace="https://schemas.microsoft.com/office/Outlook/2006/OMS")]
public string GetServiceInfo()
{
   return LoadXmlFromFile("SampleServiceInfo.xml");
}
/// <Get user information including SMTP address and mobile phone number./>
[System.Web.Services.WebMethodAttribute()]
[System.Web.Services.Protocols.SoapRpcMethodAttribute("https://schemas.microsoft.com/office/Outlook/2006/OMS/GetUserInfo",
RequestNamespace="https://schemas.microsoft.com/office/Outlook/2006/OMS",
ResponseNamespace="https://schemas.microsoft.com/office/Outlook/2006/OMS")]
public string GetUserInfo(string xmsUser)
{
   if (!m_schemaProvider.FValidXml(xmsUser, “xmsUserSchema.xsd”))
   {
      return LoadXmlFromFile("SchemaError.xml");
   }
   CUserLogon usrLogon = new CUserLogon(xmsUser);
   if (!usrLogon.FLogon())
   {
      return LoadXmlFromFile("LogonFailed.xml");
   }
   return LoadXmlFromFile("SampleUserInfo.xml");
}
/// <Send SMS or MMS message data to specific recipients/>
[System.Web.Services.WebMethodAttribute()]
[System.Web.Services.Protocols.SoapRpcMethodAttribute("https://schemas.microsoft.com/office/Outlook/2006/OMS/SendXms",
RequestNamespace="https://schemas.microsoft.com/office/Outlook/2006/OMS",
ResponseNamespace="https://schemas.microsoft.com/office/Outlook/2006/OMS")]
public string SendXms(string xmsData)
{
   if (!m_schemaProvider.FValidXml(xmsUser, "xmsDataSchema.xsd"))
   {
      return LoadXmlFromFile("SchemaError.xml");
   }
   CUserLogon usrLogon = new CUserLogon(xmsData);
   if (!usrLogon.FLogon())
   {
      return LoadXmlFromFile("LogonFailed.xml");
   }
   return LoadXmlFromFile("SampleResponse.xml");
}
// <Load XML file />
private string LoadXmlFromFile(string strFile)
{
   // ...
}
private CSchemaProvider m_schemaProvider; // Helps validate XMS schemas
};//OMSService
// Extract user logon information from XML string and process logon validation
private class CUserLogon 
{
    // ....
};
// Cache schema validators
private class CSchemaProvider
{
    // ....
};

В следующих разделах методы веб-службы OMS описываются более детально, с примерами кода и строк в формате XML (serviceInfo, userInfo и xmsResponse), передаваемых в эти методы или возвращаемых ими. Язык WSDL для этих веб-методов, а также схемы для XML-строк приведены в последней статье серии — Руководство по функции Outlook 2007 “мобильная связь” (часть 3 из 3).

string GetServiceInfo() — метод веб-службы

Метод GetServiceInfo() возвращает строку в формате XML, называемую serviceInfo. Она содержит основные свойства веб-службы OMS, в том числе поддерживаемые типы обслуживания, их параметры и типы проверки подлинности.

OMS-клиент , встроенный в Outlook, вызывает метод GetServiceInfo(), чтобы получить свойства веб-службы OMS, когда пользователь создает новую учетную запись: или обновить свойства службы после ее публикации. Используя полученную информацию, OMS регистрирует веб-службу на клиенте как разрешенного поставщика услуг.

Ниже показан XML-документ serviceInfo, возвращаемый методом GetServiceInfo():

Пример строки serviceInfo

<?xml version="1.0" encoding="utf-16"?>
<serviceInfo xmlns="https://schemas.microsoft.com/office/Outlook/2006/OMS/serviceInfo">
<serviceProvider>ABC Company</serviceProvider>
<serviceUri>http://www.abc.com.cn/OMS3/XMS.asmx</serviceUri>
<signUpPage>http://www.abc.com.cn/ws/xmssignup.aspx/</signUpPage>
<targetLocale>2052</targetLocale>
   <localName>ABC Mobile Service</localName>
   <englishName>ABC Mobile Service</englishName>
   <authenticationType>Other</authenticationType>
   <supportedService>
      <SMS_SENDER maxRecipientsPerMessage="50" maxMessagesPerSend="20"
         maxSbcsPerMessage="140" maxDbcsPerMessage="70" />
      <MMS_SENDER supportSlide="true" maxRecipientsPerMessage="100" 
         maxSizePerMessage="30000" maxSlidesPerMessage="10" />
   </supportedService>
</serviceInfo>

Разработчики должны учитывать следующее:

  • Строка serviceInfo передается как Юникод и затем кодируется в UTF-16.
  • Значение serviceUri используется как уникальный идентификатор службы. Если значение serviceUri веб-службы OMS меняется, OMS-клиент расценит службу как новую.
  • Для поддержки длинных текстовых сообщений поставщик услуг может установить значения атрибутов maxSbcsPerMessage и maxDbcsPerMessage элемента SMS_SENDER такими, чтобы их оказались способными принять большинство моделей устройств, используемых подписчиками.
  • Установка веб-службой OMS значения “true” атрибуту supportSlide элемента MMS_SENDER означает, что формат Synchronized Multimedia Integration (SMIL) поддерживается. Сообщение, которое использует язык SMIL, называется сообщением в режиме слайдов. Если веб-служба OMS, не поддерживающая SMIL, получает сообщение в режиме слайдов, она должна либо возвратить ошибку с типом “other”, либо преобразовать сообщение в режим потока.

string GetUserInfo(string xmsUser) — метод веб-службы

OMS-клиент, встроенный в Outlook, получает номер мобильного телефона пользователя и другую информацию о нем, вызывая метод GetUserInfo() со строкой xmsUser в качестве параметра. Это строка в формате XML, содержащая данные о проверке подлинности пользователя, включая идентификатор пользователя (ID) и пароль. GetUserInfo() возвращает строку в формате XML, называемую userInfo, которая содержит элемент error, чей атрибут severity имеет значение “failure”.

Коды ошибок, обычно возвращаемых в строке userInfo, приведены в таблице 1.

Табл. 1. Коды ошибок, возвращаемые вызовом GetUserInfo()

Code Severity
Ok Neutral
invalidUser Failure
unregisteredUser Failure
expiredUser Failure

Полный список кодов ошибок, которые может вернуть веб-служба OMS, приведен в разделе “Коды ошибок OMS” Руководства по функции Outlook 2007 “мобильная связь” (часть 3 из 3). Следует, однако, заметить, что схема userInfo не содержит упомянутые там дочерние элементы content и recipientList. Также, атрибут severity является необязательным для ошибки в строке userInfo, но требуется в строке xmsResponse. Если в элементе error строки userInfo не определен атрибут severity, OMS-клиент будет считать, что ему присвоено значение “neutral”.

Примечание. Разработчикам следует учитывать, что строки xmsUser и userInfo передаются в формате Юникод в кодировке UTF-16.

Следующий код демонстрирует реализацию метода GetUserInfo(), который использует объект XmlTextWriter для записи информации о пользователе и кода ошибки в строку в формате XML.

Пример метода GetUserInfo()

// …
private const string m_sOmsNamespace = "https://schemas.microsoft.com/office/Outlook/2006/OMS";
public string GetUserInfo(string xmsUser)
{
   StringWriter stringWriter = null;
   XmlTextWriter writer = null;
   try
   {
      // Add code to verify user logon password 
      // and retrieve user information.
      // ...
      stringWriter = new StringWriter(new StringBuilder());
      writer = new XmlTextWriter(stringWriter);
      writer.WriteStartElement("userInfo", m_sOmsNamespace);
      writer.WriteStartElement("replyPhone");
      writer.WriteString(**replyPhone value**);
      writer.WriteEndElement(); // </replyPhone>
      writer.WriteStartElement("smtpAddress");
      writer.WriteString(**smtpAddress value**);
      writer.WriteEndElement(); // </smtpAddress>
      writer.WriteStartElement("error");
      writer.WriteAttributeString("code", "ok"); // return "ok" if no errors
      writer.WriteEndElement(); // </error>
      writer.WriteEndElement(); // </userInfo>
      return stringWriter.GetStringBuilder().ToString();
   }
   finally
   {
      if (writer != null)
         writer.Close();

      if (stringWriter != null)
         stringWriter.Close();
   }
}

Следующий пример демонстрирует строки xmsUser и userInfo.

Пример строки xmsUser

<?xml version="1.0" encoding="utf-16"?>
<xmsUser client="Microsoft Office Outlook 12.0" xmlns = "https://schemas.microsoft.com/office/Outlook/2006/OMS">
   <userId>myname</userId>
   <password>mypwd</password>
   <customData/>
</xmsUser>

Пример строки userInfo, возвращаемой методом GetUserInfo() в результате успешного вызова

<?xml version="1.0" encoding="utf-16"?>
<userInfo xmlns = "https://schemas.microsoft.com/office/Outlook/2006/OMS">
   <replyPhone>090123456</replyPhone>
      <smtpAddress>userid.spmail@spdomain.com</smtpAddress>
   <error code="ok"/>
</userInfo>

Пример строки userInfo, возвращаемой в результате ошибки

<?xml version="1.0" encoding="utf-16"?>
<userInfo xmlns = "https://schemas.microsoft.com/office/Outlook/2006/OMS">
   <error code="unregistered" severity="failure"/>
</userInfo>

Рассмотрим подробнее элементы строки userInfo. Элемент replyPhone содержит номер мобильного телефона, на который зарегистрирована подписка на услуги у поставщика услуг. Значение replyPhone отображается в диалоговом окне параметров учетной записи в Outlook в качестве номера мобильного телефона по умолчанию. OMS-клиент получает это значение путем вызова метода GetUserInfo() при создании учетной записи пользователем. OMS-клиент вызывает метод GetUserInfo() и для обновления replyPhone в случае, когда пользователь просматривает или изменяет свою учетную запись, не вводя при этом номер мобильного телефона самостоятельно, а также когда веб-служба OMS уведомляет клиента об изменении информации службы, посылая код ошибки “serviceUpdate”.

Кроме того, элемент replyPhone используется как номер ответного вызова по умолчанию для некоторых рынков, например в Корее, где такой номер поддерживается и требуется. Для Кореи значение replyPhone или любого другого номера телефона, вводимого пользователем, используется как номер ответного вызова пользователя при отправке сообщений SMS и MMS.

Наконец, элемент smtpAddress содержит уникальный SMTP-адрес, выдаваемый поставщиком услуг каждому подписчику. Этот адрес используется поставщиком для отправки ответов с мобильного телефона в Outlook 2007. Создание уникального SMTP-адреса для каждого подписчика требуется от поставщиков услуг OMS для предотвращения рассылок нежелательных сообщений электронной почты с использованием такого адреса.

string SendXms(string xmsData) — метод веб-службы

OMS-клиент, встроенный в Outlook 2007, вызывает метод SendXms() для доставки мобильных сообщений поставщику услуг. Содержимое сообщения упаковывается в строку в формате XML, называемую xmsData. Поставщик услуг после попытки отправить сообщение возвращает строку в формате XML под названием xmsResponse, которая содержит один или больше элементов error, говорящих об успехе или неудаче отправки сообщения каждому из получателей.

Пример метода SendXms()

Следующий код демонстрирует реализацию метода SendXms(), который использует объект XmlTextWriter для записи информации об успехе или неудаче вызова в строку xmsResponse.

// …
private const string m_sOmsNamespace = "https://schemas.microsoft.com/office/Outlook/2006/OMS";
public string SendXms(string xmsData)
{
   StringWriter stringWriter = null;
   XmlTextWriter writer = null;
   try
   {
      stringWriter = new StringWriter(new StringBuilder());
      writer = new XmlTextWriter(stringWriter);
      writer.WriteStartElement("xmsResponse", m_sOmsNamespace);
      // XML format validation
      if (!m_schemaProvider.FValidXml(xmsData, "xmsDataSchema.xsd"))
      {
         BuildError(writer, "invalidFormat", true /* failure */, "", "");
         return stringWriter.GetStringBuilder().ToString();
      }
      // User validation
      CUserLogon usrLogon = new CUserLogon(xmsData);
      if (!usrLogon.FLogon())
      {
         BuildError(writer, "invalidUser", true /* failure */, "", "");
         return stringWriter.GetStringBuilder().ToString();
      }
      // Add YOUR code for your business logic to send the xmsData
      //to the intended recipients.
      // ...
      // Sent out OK.
      BuildError(writer, "ok", false /* success */, "", "");
      return stringWriter.GetStringBuilder().ToString();
   }
   catch (XmlException ex)
   {   
      // Handle exceptions.
      return  "<?xml version=\"1.0\" encoding=\"utf-16\"?>"
         + " <xmsResponse xmlns=\"https://schemas.microsoft.com/office/Outlook/2006/OMS\">"
         + " <error code=\"others\" severity=\"failure\"> <content>" + ex.Message + " </content> </error>"
         + "</xmsResponse>";
   }
   finally
   {
      if (writer != null)
          writer.Close();
      if (stringWriter != null)
          stringWriter.Close();
   }
}//end SendXMS
// Build error elements.
private void BuildError(XmlTextWriter wr, 
   string errCode, 
   bool bFailed, 
   string strContent,
   string strRecipients)
{
   wr.WriteStartElement("error");
   wr.WriteAttributeString("code", errCode);
   wr.WriteAttributeString("severity", bFailed ? "failure" : "neutral");

   if (strContent.Length > 0)
   {
      wr.WriteStartElement("content");
      wr.WriteString(strContent);
      wr.WriteEndElement(); // </content>
   }
   if (strRecipients.Length > 0)
   {
      wr.WriteStartElement("recipientList");
      wr.WriteString(strRecipients);
      wr.WriteEndElement(); // </recipientList>
   }
   wr.WriteEndElement(); // </error>
}//end BuildError

xmsData

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

Пример строки xmsData, содержащей SMS-сообщение

<?xml version="1.0" encoding="utf-16"?>
<xmsData client="Microsoft Office Outlook 12.0" xmlns = "https://schemas.microsoft.com/office/Outlook/2006/OMS">
   <user>
      <userId>myname</userId>
      <password>mypwd</password>
      <replyPhone>13801391350</replyPhone>
      <customData/>
   </user>
   <xmsHead>
      <scheduled>2005-04-20T14:20:00Z</scheduled>
      <requiredService>SMS_SENDER</requiredService>
      <to>
         <recipient>135xxxx</recipient>
         <recipient>139xxxx</recipient>
      </to>
   </xmsHead>
   <xmsBody format="SMS">
      <content contentType="text/plain" contentId="Att0.txt@AB1B43B2B0594564.B94EF7ABB12B49BA"
            contentLocation="1.txt">(1/2)This is the first SMS message...</content>
      <content contentType="text/plain" contentId="Att1.txt@AB1B43B2B0594564.B94EF7ABB12B49BA"
            contentLocation="2.txt">(2/2)This is the second SMS message...</content>
   </xmsBody>
</xmsData>

Пример строки xmsData, содержащей MMS-сообщение

<?xml version="1.0" encoding="utf-16"?>
<xmsData client="Microsoft Office Outlook 12.0"xmlns = "https://schemas.microsoft.com/office/Outlook/2006/OMS">
   <user>
      <userId>myname</userId>
      <password>mypwd</password>
      <replyPhone>13801391350</replyPhone>
      <customData/>
   </user>
   <xmsHead>
      <scheduled>2005-04-20T14:20:00Z</scheduled>
      <requiredService>MMS_SENDER</requiredService>
      <sourceType>reminder</sourceType>
      <to>
         <recipient>135xxxx</recipient>
         <recipient>139xxxx</recipient>
      </to>
      <subject>My Message</subject>
   </xmsHead>
   <xmsBody format="MMS">
      <mmsSlides>
         <head>
            <meta name="author" content="msOfficeOutlookOms" />
            <layout>
               <root-layout width="120" height="120" background-color="#ffffff" />
               <region id="image" left="0" top="0" width="120" height="90" />
               <region id="text" left="0" top="90" width="120" height="30" />
            </layout>
         </head>
         <body>
            <par dur="3000">
               <img src="cid:Att1.gif@AB1B43B2B0594564.B94EF7ABB12B49BA" region="image" />
               <text src="cid:Att0.txt@AB1B43B2B0594564.B94EF7ABB12B49BA" region="text"/>
               <audio src="cid:Att2.mid@AB1B43B2B0594564.B94EF7ABB12B49BA" />
         </par>
         </body>
      </mmsSlides>
      <content contentType="text/plain" contentId="Att0.txt@AB1B43B2B0594564.B94EF7ABB12B49BA"
            contentLocation="1.txt">This is the text part</content>
      <content contentType="image/gif" contentId="Att1.gif@AB1B43B2B0594564.B94EF7ABB12B49BA"
            contentLocation="106675.gif">/9j/4AAQ ...... AVExISEyccHhcgLikxMC4p</content>
      <content contentType="audio/midi" contentId="Att2.mid@AB1B43B2B0594564.B94EF7ABB12B49BA"
            contentLocation="1898.mid">/wDQjVYUrl ...... GoJ4e8j</content>
   </xmsBody>
</xmsData>

Поддерживаемые типы содержимого

Для SMS-сообщений поддерживается тип содержимого “text/plain”. Для MMS-сообщений служба OMS поддерживает мультимедийные объекты, перечисленные в таблице 2. На стороне клиента служба OMS при необходимости преобразует все остальные типы объектов к приведенным ниже.

Табл. 2. Поддерживаемые типы содержимого

Содержимое Тип MIME Описание
Текст text/plain Простой текст. Используется как в SMS-, так и в MMS-сообщениях.
Неподвижное изображение image/jpeg 96 точек на дюйм. Размер изображения не больше размера экрана мобильного устройства, который указан в элементе root-layout строки xmsData. Кодировка Base64. Применимо только к MMS-сообщениям.
Изображение с несколькими кадрами image/gif Формат GIF89a, 96 точек на дюйм, не более 256 цветов. Размер изображения не больше размера экрана мобильного устройства, который указан в элементе root-layout строки xmsData. Кодировка Base64. Применимо только к MMS-сообщениям.
Звук в формате MIDI Audio/mid Звук в формате MIDI. Кодировка Base64. Применимо только к MMS-сообщениям.
Звук в формате AMR Audio/AMR Формат AMR, один канал, 8 кГц. Кодировка Base64. Применимо только к MMS-сообщениям.

Веб-служба OMS ответственна за проверку того, что сообщение, получаемое ею в одной строке xmsData, удовлетворяет установленным службой ограничениям, а также за все необходимые действия, которые надо предпринять для отправки, и возвращение правильных кодов ошибки.

xmsResponse

Метод SendXms() возвращает строку в формате XML, называемую xmsResponse, которая содержит один или несколько элементов error. Как и в случае со строкой userInfo, элемент error, чей атрибут code имеет значение “ok”, а атрибут severity — значение “neutral”, используется для сообщения об успехе.

У элемента error два дочерних элемента: content, представляющий собой строку, содержащую описание или параметры ошибки, и recipientList, являющийся строкой, содержащей список получателей, разделенных точками с запятой, к которым относится ошибка.

Для каждого элемента error может быть определено не более чем по одному элементу content и recipientList. Отсутствие элемента recipientList означает, что ошибка относится ко всем получателям.

Каждый код ошибки имеет два обязательных атрибута: code и severity. Код ошибки не чувствителен к регистру. Допустимые значения severity таковы:

При использовании элемента error и атрибута severity следует учитывать следующее:

  • если элемент error отсутствует в строке xmsResponse, OMS-клиент делает вывод о возникновении ошибки уровня “failure”;
  • если элемент error в строке xmsResponse присутствует, но атрибут code в нем не задан, OMS-клиент делает вывод о возникновении неизвестной ошибки уровня “failure”;
  • если элемент error в строке xmsResponse присутствует, но атрибут severity в нем не задан, OMS-клиент принимает его равным “neutral”;
  • если возвращено несколько кодов ошибки, то ошибка с самым старшим уровнем severity принимается в расчет при определении того, будет ли OMS-клиент создавать отчет о недоставке и отправлять его пользователю. Если есть как минимум одна ошибка уровня “failure”, OMS-клиент создает этот отчет, уведомляя пользователя, что сообщение не было доставлено.

Ниже приведены примеры строк xmsResponse.

Пример строки xmsReponse, показывающей, что сообщение успешно отправлено

<?xml version="1.0" encoding="utf-16"?>
<xmsResponse xmlns="https://schemas.microsoft.com/office/Outlook/2006/OMS">
   <error code="ok" severity="neutral"/>
</xmsResponse>

Пример строки xmsReponse с ошибкой уровня “failure”

<?xml version="1.0" encoding="utf-16"?>
<xmsResponse xmlns="https://schemas.microsoft.com/office/Outlook/2006/OMS">
   <error code="perDayMsgLimit" severity="failure">
      <content>20 SMS</content>
      <recipientList>13601391354;13601391388</recipientList>
   </error>
</xmsResponse>

Упаковка входящих мобильных сообщений

Чтобы сделать возможным двусторонний обмен мобильными сообщениями между Outlook и мобильным телефоном, веб-службе OMS необходимо упаковать ответ, отправленный с мобильного телефона, в SMTP-сообщение электронной почты формата MIME с классом содержимого, определенным в OMS, после чего отправить это сообщение на указанный адрес электронной почты. Когда Outlook 2007 получает такое сообщение, он распознает класс содержимого и трактует сообщение как мобильное.

На рис. 2 и 3 демонстрируются примеры SMS- и MMS-ответов, упакованных в сообщения электронной почты формата MIME. В следующих разделах описываются шаги, необходимые для упаковки мобильного сообщения в сообщение электронной почты.

Заголовки сообщений

Упаковывая ответ в сообщение электронной почты, необходимо задать значения для SMTP-заголовков , как это описано в следующих разделах, чтобы OMS-клиент мог распознать входящее сообщение как сообщение с мобильного телефона.

Content-Class

Заголовок “Content-class” должен содержать одно из следующих значений:

  • для SMS-сообщений: MS-OMS-SMS
  • для MMS-сообщений: MS-OMS-MMS

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

Чтобы гарантировать, что клиент корректно отобразит входящее мобильное сообщение, упакованное как сообщение электронной почты, следует задать нужный набор символов для всех заголовков, содержащих текст за пределами US ASCII, а также для всех частей MIME, имеющих тип “text”.

X-MS-Reply-To-Mobile

Следующий заголовок используется специально для указания номера мобильного телефона отправителя:

X-MS-Reply-To-Mobile:

Заголовок дожжен содержать допустимый номер мобильного телефона.

Пример использования заголовка X-MS-Reply-To-Mobile (первые две цифры номера мобильного телефона представляют код страны):

X-MS-Reply-To-Mobile:+8613601391354

To

Значение поля To — адрес электронной почты, указанный пользователем для получения входящих мобильных сообщений:

To: vadimtumanov@example.com

From

Значение поля From — адрес электронной почты, используемый при отправке ответа. Поставщик услуг OMS обязан предоставить уникальный SMTP-адрес каждому подписчику для отправки тому ответов. Поле From должно иметь вид, сходный со следующим примером:

From: userid.spmail@spdomain.com

Subject

Если выполняется ответ на входящее SMS-сообщение, рекомендуется задать полю Subject первые примерно 40 символов этого SMS-сообщения или его первую строку, если оно разбито на строки.

При ответе на входящее MMS-сообщение, поле Subject рекомендуется задать равным полю Subject MMS-сообщения. Поскольку MMS-сообщения не могут быть полностью показаны в области просмотра Outlook, к полю Subject MMS-сообщения следует добавить примечание, напоминающее пользователю, что для просмотра содержимого сообщение надо открыть:

Тема MMS-сообщения (чтобы посмотреть сообщение, откройте его)

Тело сообщения

Входящее SMS-сообщение

Для составления тела сообщения, соответствующего входящему SMS-сообщению, следует, как показано на рис. 2, создать MIME-часть с простым текстом, которая будет содержать текст SMS-сообщения, для чего добавить следующие заголовки:

Content-Type: text/plain; charset=xxxx

Content-Transfer-Encoding: quoted-printable

Допустимым значением charset будет, например, “us-ascii” (ASCII) или “gb2312” (упрощенная китайская). Поставщики услуг также могут использовать тип содержимого multipart/alternative, предоставляя HTML-представление тела сообщения.

Рис. 2. Пример входящего SMS-сообщения, упакованного как сообщение электронной почты

From: "Mobile Inbound Agent" incomingmessage@service-provider.com

To: vadimtumanov@example.com

Subject: This is a text message

Date: Mon, 7 Nov 2005 17:52:00 +0800

Content-class: MS-OMS-SMS

X-MS-Reply-To-Mobile:+8613601391354

MIME-Version: 1.0

Content-Type: text/plain; charset="cp1251"

Content-Transfer-Encoding: quoted-printable

Это текстовое сообщение с мобильного телефона в ответ на текстовое сообщение из Outlook.

Входящее MMS-сообщение

Составляя тело сообщения для входящего MMS-сообщения, необходимо следовать стандарту 3GPP в кодировании MMS-сообщений как SMTP-сообщений в формате MIME.

Если возможности языка SMIL доступны, следует составить тело MIME как multipart/related:

Content-Type: multipart/related; type=”application/smil”;

Первая MIME-часть SMIL должна быть такой:

Content-Type: application/smil; name = "mmspresent.smil"

Части, представляющие мультимедийные объекты MMS-сообщения, должны кодироваться вслед за файлом SMIL как MIME-части с соответствующими типами.

Если возможности языка SMIL недоступны, следует составить тело MIME как multipart/mixed:

Content-type: multipart/mixed

Мультимедийные объекты MMS-сообщения кодируются как MIME-части с соответствующими типами. На рис. 3 приведен пример MMS-сообщения, закодированного в формате MIME.

Рис. 3. Пример входящего MMS-сообщения, упакованного как сообщение электронной почты

From: "Mobile Inbound Agent" incomingmessage@service-provider.com

To: vadimtumanov@example.com

Subject: This is a multimedia message (Open the message to view its content)

Date: Mon, 7 Nov 2005 17:52:00 +0800

Content-class: MS-OMS-MMS

X-MS-Reply-to-mobile: +8613601391354

MIME-Version: 1.0

Content-Type: multipart/related; type=”application/smil”;

boundary="--------------Boundary=_thisisboundary"

This is a multi-part message in MIME format.

--------------Boundary=_thisisboundary

Content-Type: application/smil; name="mmspresent.smil"

Content-Location: ”mmspresent.smil”

Content-Transfer-Encoding: Base64

PHNtaWw+… 1pbD4=

--------------Boundary=_thisisboundary

Content-Type: text/plain; name="textpart.txt"

Content-Transfer-Encoding: Base64

Content-Location: textpart.txt

6Zi/5YWs5Y+45rOV5b6L5biI6IyD5Zu057uV6YGT6LCi

--------------Boundary=_thisisboundary

Content-Type: image/gif; name="imagepart.gif"

Content-Transfer-Encoding: Base64

Content-Location:imagepart.gif

R0lGODlheABaAPf/…BDQi6j4uQAxwcixRzZErI5ROjfvSHJcmRMGBAAOw==

--------------Boundary=_thisisboundary

Content-Type: audio/midi; name="audiopart.mid"

Content-Transfer-Encoding: Base64

Content-Location: audiopart.mid

TVRoZAAAAAY…XBDfwA/fwA6f4dAOgAAPwAAQwAA/y8A

--------------Boundary=_thisisboundary

Защищенность соединения

Для защиты сведений, передаваемых через Интернет, веб-службы OMS обязаны поддерживать шифрование SSL. SSL используется для установления более защищенного соединения в ненадежных сетях, к каким относится и Интернет. По этому протоколу осуществляется шифрование и расшифровка передаваемых сообщений, что исключает их прочтение в случае перехвата.

Заключение

Эта статья является вводной и в ней описана архитектура веб-службы OMS, взаимодействие между веб-службой OMS и OMS-клиентом. Руководство по размещению веб-службы OMS см. в Руководстве по функции Outlook 2007 “мобильная связь” (часть 2 из 3). XML-схемы и WSDL для веб-служб OMS см. в Руководстве по функции Outlook 2007 “мобильная связь” (часть 3 из 3).

Дополнительные источники

Дополнительные сведения см. в следующих источниках: