Compartir a través de


Este artículo proviene de un motor de traducción automática.

Microsoft Office

Exploración de la API de JavaScript para Office: Una aplicación de correo electrónico de muestra

Angela Chu-Hatoun

Descargar el ejemplo de código

Acompaña a este artículo la MSDN Magazine artículo, "explorando la API de JavaScript para la oficina: Aplicaciones de correo"(msdn.microsoft.com/magazine/dn201750).Aquí, camina a través de una aplicación de correo de grupo IM muestra utilizando las técnicas explicadas en el artículo.

Grupo IM a partir de un mensaje

La aplicación de correo de grupo IM le permite convenientemente iniciar una sesión de mensajería instantánea de grupo con el remitente, los destinatarios o las personas cuyas direcciones de correo electrónico se incluyen en el cuerpo de un mensaje seleccionado, sin dejar de Outlook o Outlook Web App.Figura 1 muestra al usuario Belinda haber seleccionado a los destinatarios que Jeff y Ben y estando preparada para comenzar una sesión de mi con el grupo IM correo app.El panel de aplicación incluye las direcciones SMTP de todos los destinatarios del mensaje actual en el panel de lectura, así como cualquier dirección de correo SMTP (para Vernon, Sam y romano) en el cuerpo del mensaje de Belinda iniciar una sesión de mi con.

Selecting Message Recipients in the Group IM Mail App to Start a Group Chat SessionFigura 1 seleccionar los destinatarios del mensaje en la aplicación de correo IM de grupo para iniciar una sesión de Chat de grupo

La aplicación de correo de grupo IM asume Lync como el cliente de mensajería que soporta el protocolo de iniciación de sesión (SIP) y un enfoque de línea de comandos para iniciar IM.Usted puede modificar la función checkAddress en el archivo de JavaScript de esta aplicación de correo, InstantMessage.js, se muestra en la figura 2 (usted puede descargar el conjunto completo de archivos de origen para la aplicación de correo en code.msdn.microsoft.com/Mail-apps-for-Outlook-2b20fc16), para personalizar la aplicación para un cliente de mensajería diferente.

Figura 2 el archivo de JavaScript InstantMessage.js

var _Item;
var itemEntities;
var myEntities = new Array();
var uniqueNumInRecipientsAndBody=0;
Office.initialize = function () {
  _Item = Office.context.mailbox.item;
  itemEntities = _Item.getEntities();
  $(document).ready(function () {
   initIM();
  }); 
}
var checkedItems;
checkedItems = "";
// This function verifies if the user has checked any of the
// checkboxes for the SMTP addresses, and if so, constructs a hyperlink
// for starting an IM session.
function checkAddress(emailForm)
{
  var anychecked;
  anychecked = 0;
  checkedItems = "im:";
  // See if the e-mail sender address is checked.
if (emailForm.checkbox0.checked == true) {
    checkedItems += "<sip:" + _Item.sender.emailAddress + ">";
    anychecked = 1;
  }
  for (var i=1; i<=uniqueNumInRecipientsAndBody; i++) {
    var tempy;
    // Determine if each checkbox is checked.
// Each checkbox name is a variable depending on value of i.
tempy = "checkbox" + i;
    // Use JavaScript square bracket notation instead of dot notation to access
    // emailForm.tempy.checked, because tempy is a variable.
tempy = emailForm[tempy]["checked"];
    if (tempy)  {
      // If the checkbox is checked, construct an SIP address
      // for that e-mail address.
checkedItems += "<sip:" + myEntities[i-1] + ">";
      anychecked = 1; 
    }
  }
  // Clear the variable if none of the checkboxes is checked.
// UI phrase remains not a hyperlink.
if (anychecked == 0) {
    checkedItems = "";
    document.getElementById("mySpan").innerHTML = "Start an instant message conversation";
  } 
  else {
    // If one or more checkboxes are checked, then turn the UI phrase into a hyperlink.
document.getElementById("mySpan").innerHTML =
      "<A HREF = \"" + checkedItems + "\">Start an IM conversation</A>";
  }    
}
// This function counts the unique number of e-mail addresses.
// The first such count number of array cells in myEntities
// contain the unique e-mail addresses.
function makeMyAddressesUnique (addressArray)
{
  var emailAddress;
  var j=0;
  for (var i in addressArray) {
    emailAddress = addressArray[i];
    // Check if e-mail address is not the same as the sender's address
    // or the current user's address, is new and
    // has not occured in the first i number of cells in addressArray.
if ((emailAddress.toLowerCase() !== _Item.sender.emailAddress.toLowerCase()) &&
      (emailAddress.toLowerCase() !==  
      Office.context.mailbox.userProfile.emailAddress.toLowerCase()) &&
      (emailAddrIsNew (i, emailAddress, addressArray))) {
      myEntities[j] = emailAddress.toLowerCase();
      j++;
    }
    // Otherwise e-mail address already occurred in sender or addressArray, so ignore it.
// The next new e-mail address will overwrite cell j in myEntities.
}
    // Tallied the number of unique addresses in the body.
uniqueNumInRecipientsAndBody = j;   
}
function emailAddrIsNew (index, address, array) {
  var counter = 0;
  while (counter < index) {
    if (address.toLowerCase() === array[counter].toLowerCase()) {
      return (false);
    }
    counter++;
  }
  return (true);
}
function initIM()
{
  var myHTMLString;
  var myCell;
  var tempEntities;
  var toRecipients;
  var ccRecipients;
  var recipientsAddresses = new Array ();
  var recipientsAndBodyAddresses = new Array();
  toRecipients = _Item.to;
  ccRecipients = _Item.cc;
  myHTMLString = "";
  // Assign first the To recipients addresses, followed by
  // the cc recipients addresses.
for (var i=0; i<toRecipients.length; i++) {
    recipientsAddresses[i] = toRecipients[i].emailAddress;
  }
  for (var i=0; i<ccRecipients.length; i++) {
    recipientsAddresses[i+toRecipients.length] = ccRecipients[i].emailAddress;
  }
  recipientsAndBodyAddresses = recipientsAddresses.concat(itemEntities.emailAddresses);
  makeMyAddressesUnique (recipientsAndBodyAddresses);
  myCell = document.getElementById('extensionspace');
  myHTMLString += "<form><span id=\"mySpan\">Start an instant message conversation</span>" +
    " with the following persons:<BR>";
  myHTMLString += "<input type=checkbox name='checkbox0" + "' value='" +
    _Item.sender.emailAddress + "' onClick='checkAddress(this.form)' />" +
    _Item.sender.emailAddress + "<br>";
  for (var i=0; i<uniqueNumInRecipientsAndBody; i++) {
    myHTMLString += "<input type=checkbox name='checkbox" + (i+1) + "' value='" +
      myEntities[i] + "' onClick='checkAddress(this.form)' />" +
      myEntities[i] + "<br>";
    }
    myCell.innerHTML = myHTMLString + "</form>";
}

El escenario

Al leer un correo electrónico, quiere avanzar una discusión por mensajería instantánea de los destinatarios del mensaje, o con las personas cuyo e-mail direcciones están incluidos en el cuerpo del mensaje. Puede elegir la aplicación de correo de grupo IM, seleccionar en los receptores de panel de aplicación o direcciones del mensaje de correo electrónico y, sin salir de Outlook, iniciar una sesión de mi grupo en tu cliente de mensajería instantánea.

Este escenario supone el uso de Outlook 2013 (o una versión posterior) y Exchange Online o Exchange Server 2013 (o una versión posterior). Los participantes y sus direcciones SMTP también deben ser apoyados por el cliente de mensajería instantánea.

Tratar la aplicación de correo

Siga las instrucciones en el archivo "Readme para grupo IM correo app," con la descarga de código que lo acompaña (code.msdn.microsoft.com/Mail-apps-for-Outlook-2b20fc16), para descargar e instalar la aplicación de correo de su buzón de correo. Outlook activa esta aplicación de correo para cualquier mensaje de correo electrónico en su bandeja de entrada, para que pueda probar esta aplicación de correo con cualquier mensaje que usted está viendo en el panel de lectura o inspector de correo. Alternativamente, para un ambiente más controlado de la prueba, usted puede crear un mensaje de correo electrónico de prueba especiales incluyen a ti mismo y algunos otros destinatarios, especificar algunas otras direcciones SMTP en el cuerpo del mensaje y enviar el mensaje.

Para probar, abra el mensaje de prueba especial en el panel de lectura y seleccione el botón de la aplicación de "Grupo IM". El panel de aplicación incluye las direcciones de correo electrónico de los destinatarios y las direcciones SMTP en el cuerpo del mensaje. En el panel de la aplicación, seleccione dos o más direcciones de correo electrónico y seleccione el enlace "Iniciar una conversación IM". Su cliente de mensajería instantánea abre una ventana IM para que pueda iniciar la sesión de chat de grupo.

El resto de este artículo describe el manifiesto XML, archivos HTML y JavaScript para la aplicación de correo de grupo IM. En el camino, destaco puntos de interés.

El manifiesto XML

Cada aplicación de correo debe definir un manifiesto que sigue a las aplicaciones de esquema XML de Office como se indica en el artículo de MSDN Library, **"**mapa de esquema (aplicaciones para oficina)," en bit.ly/13bPpWH. Un manifiesto de la aplicación de correo define los metadatos siguientes de la aplicación:

  • Identidad
  • Soporte de configuración regional
  • Capacidad necesaria de las aplicaciones de host
  • Factores de forma
  • Archivo HTML correspondiente para cada factor de forma (si es necesario)
  • Requisitos de visualización
  • Permisos necesarios
  • Reglas de activación

Esta sección destaca los puntos específicos de interés en el manifiesto, Lync IM.xml, que caracterizan a la aplicación de correo de grupo IM. Para una lista completa del manifiesto, consulte figura 3 (usted puede descargar el conjunto completo de archivos de origen para la aplicación de correo a (code.msdn.microsoft.com/Mail-apps-for-Outlook-2b20fc16).

Figura 3 archivo de manifiesto XML App

<?xml version="1.0" encoding="utf-8"?>
<OfficeApp xmlns="https://schemas.microsoft.com/office/appforoffice/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="MailApp">
  <Id>0DA74E27-C945-47A0-9857-64268DEF6542</Id>
  <Version>1.0</Version>
  <ProviderName>Microsoft</ProviderName>
  <DefaultLocale>EN-US</DefaultLocale>
  <DisplayName DefaultValue="Group IM">
    <Override Locale="FR-FR" Value="Message instantané"/>
  </DisplayName>
  <Description DefaultValue="Start a group instant message session using Lync.">
    <Override Locale="FR-FR" Value="Démarrer un message instantané appel directement à partir de Outlook ou Outlook Web App à l'aide de Lync."/>
  </Description>
  <IconUrl DefaultValue="https://exchangemoe.redmond.corp.microsoft.com/ext/ach/GroupIM/mslync-logo_small.png"/>
  <Capabilities>
    <Capability Name="Mailbox"/>
  </Capabilities>
  <DesktopSettings>
    <!-- Change the following line to specify the web server -->
    <!-- that hosts the HTML file.
-->
    <SourceLocation DefaultValue=
      "https://exchangemoe.redmond.corp.microsoft.com/ext/ach/GroupIM/InstantMessage.htm"/>
    <RequestedHeight>216</RequestedHeight>
  </DesktopSettings>
  <TabletSettings>
    <!-- Change the following line to specify the web server -->
    <!-- that hosts the HTML file.
-->
    <SourceLocation DefaultValue=
      "https://exchangemoe.redmond.corp.microsoft.com/ext/ach/GroupIM/InstantMessage.htm"/>
    <RequestedHeight>180</RequestedHeight>
  </TabletSettings>
  <Permissions>ReadItem</Permissions>
  <Rule xsi:type="ItemIs" ItemType="Message"/>
</OfficeApp>

El elemento raíz OfficeApp especifica el espacio de nombres y el tipo de aplicación MailApp y es el elemento raíz que incluye elementos secundarios aplicables a aplicaciones de correo en un orden secuencial. MailApp se extiende OfficeApp y sus elementos secundarios más definen metadatos para aplicaciones de correo:

<OfficeApp xmlns="https://schemas.microsoft.com/office/appforoffice/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="MailApp">

Un identificador único Id el elemento especifica un identificador único universal (UUID) que diferencia esta aplicación de otras aplicaciones para la oficina de la aplicación host:

<Id>0DA74E27-C945-47A0-9857-64268DEF6542</Id>

Una etiqueta de aplicación DisplayName el elemento identifica la aplicación como "Grupo IM" en la barra de la aplicación. Outlook activa esta aplicación mostrando "Grupo IM" en la barra de la aplicación, si se cumplen las reglas especificadas en el manifiesto en relación con el elemento seleccionado (ver la "Reglas de activación" sección):

<DisplayName DefaultValue="Group IM">
  <Override Locale="FR-FR" Value="Message instantané"/>
</DisplayName>

Apoyo local DefaultLocale el elemento especifica el nombre de la cultura de la localidad, en este caso EN-US, de las cadenas de la interfaz de usuario en el manifiesto de aplicación. Puede utilizar el elemento secundario de anulación para soportar nombres específicos de la configuración regional (por ejemplo, el nombre "Mensaje Hook" para la localidad de FR-FR en el ejemplo anterior), descripciones, imágenes de icono o archivos de código fuente:

<DefaultLocale>EN-US</DefaultLocale>

Una descripción detallada Descripción del elemento típicamente especifica el propósito de la aplicación. El atributo DefaultValue corresponde a la configuración regional especificada por el elemento DefaultLocale. Puede utilizar un elemento secundario de anulación para apoyar una descripción de un escenario diferente, como FR-FR:

<Description DefaultValue="Start a group instant message session using Lync.">
  <Override Locale="FR-FR"
    Value="Démarrer un message instantané appel directement
    à partir de Outlook ou Outlook Web App à l'aide de Lync."/>
</Description>

Capacidades elementos de la capacidad y la capacidad de especifican la funcionalidad de la aplicación trabaja con — en este caso, la capacidad del buzón. En lugar de especificar explícitamente las aplicaciones host requiere su aplicación, que utiliza estos elementos a las aplicaciones para la plataforma Office Cómo emparejar elegibles alojar aplicaciones que soporten su aplicación. Una aplicación que soporta la capacidad de buzón puede convertirse en un anfitrión para esta aplicación:

<Capabilities>
  <Capability Name="Mailbox"/>
</Capabilities>

Porque la API de JavaScript para la oficina es una API integrada compartidos por todas las apps para oficina y soporte de aplicaciones de host, el apoyo para ciertos objetos o miembros difiere de host a host. Más de estos casos se producen con aplicaciones de panel de tareas (por ejemplo, Bindings.addFromPromptAsync). Un ejemplo para aplicaciones de correo es la propiedad Diagnostics.OWAView, que está destinada a depurar en Outlook Web App pero no Outlook. En tales casos, debe asegurarse de que la API está definida antes de usarlo.

Archivo de fuente dependiente del dispositivo y la pantalla el DesktopSettings y TabletSettings elementos especifican que esta aplicación se puede ejecutar en el escritorio y factores de forma de la tableta. Puede utilizar los elementos SourceLocation y RequestedHeight para especificar los archivos de código fuente HTML mismos o dependiente del dispositivo y Mostrar la altura (en píxeles) de la aplicación. La aplicación de correo de grupo IM utiliza el mismo archivo de código fuente HTML para los factores de forma de escritorio y tablet, y especifica un taller panel de aplicación para el escritorio de la tableta.

Esta es la URL para el archivo HTML:

https://webserver/GroupIM/InstantMessage.htm

Antes de intentar la aplicación IM grupo, debe reemplazar la URL del archivo HTML con la ubicación real del archivo HTML en la configuración:

<DesktopSettings>
  <!-- Change the following line to specify the Web server -->
  <!-- that hosts the HTML file.
-->
  <SourceLocation DefaultValue="https://webserver/GroupIM/InstantMessage.htm"/>
  <RequestedHeight>216</RequestedHeight>
</DesktopSettings>
<TabletSettings>
  <!-- Change the following line to specify the Web server -->
  <!-- that hosts the HTML file.
-->
  <SourceLocation DefaultValue="https://webserver/GroupIM/InstantMessage.htm"/>
  <RequestedHeight>180</RequestedHeight>
</TabletSettings>

Permiso permisos el elemento especifica el nivel de permiso que requiere esta aplicación. En este caso, la aplicación de correo de grupo IM requiere permiso Leer artículo porque la aplicación accede a entidades (direcciones SMTP) que cambio extrae el asunto y el cuerpo:

<Permissions>ReadItem</Permissions>

Reglas de activación esta aplicación especifica una regla de ItemIs con el mensaje como el tipo de elemento. Esto significa que Outlook mostrará grupo IM en la barra de aplicación cada vez que el usuario ve un mensaje en el panel de lectura o el inspector:

<Rule xsi:type="ItemIs" ItemType="Message"/>

Tenga en cuenta que hay ciertos tipos de mensajes que no admiten aplicaciones de correo. Consulte la sección de "Artículos apoyando la activación" (bit.ly/11n0hNE) el artículo de MSDN Library, "definir reglas para mostrar una aplicación de correo de Outlook 2013," para obtener más información.

Implementación de HTML

El archivo HTML, InstantMessage.htm, especifica la interfaz de usuario de la aplicación como se muestra en el panel de la aplicación. Esta sección destaca algunos puntos de interés. Para una lista completa de InstantMessage.htm, consulte figura 4 (pueden descargar el conjunto completo de archivos de origen para la aplicación de correo de code.msdn.microsoft.com/Mail-apps-for-Outlook-2b20fc16).

Figura 4 el archivo InstantMessage.htm

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <style type="text/css">
      .title{
        font-family: arial, sans-serif;
        color: blue;
        font-size: 12pt;
        text-decoration:none;
        font-weight:bold;
      }
      .property{
        font-family:Segoe UI;
        color: black;
        font-size: 10pt;
        text-decoration:none;
      }
      .value{
        font-family:Segoe UI;
        color: gray;
        font-size:  10pt;
        text-decoration:none;
      }
      .valuesmall{
        font-family: Segoe UI;
        color: gray;
        font-size:  8pt;
        text-decoration:none;
      }
    </style>
      <title>Send Instant Messages with Lync</title>
      <script type="text/javascript"
        src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></script>
      <script type="text/javascript"
        src="https://appsforoffice.microsoft.com/lib/1.0/hosted/office.js"></script>
      <script type="text/javascript" src="InstantMessage.js"></script>
    </head>
    <body>
      <img src='mslync-logo.png' alt='Microsoft Lync'/>
      <div id="extensionspace" style="font-family: 'Segoe UI'; font-size: 10pt"> </div>
    </body>
    </html>

Usando el modo de explorador de Internet disponible más alto aplicaciones para oficina requieren un mínimo de Internet Explorer 9 en el equipo cliente. Utilice la siguiente etiqueta meta para permitir su aplicación para utilizar el modo más alto de Internet Explorer disponible en el equipo proporcionar que la mejor experiencia del usuario puede conseguir:

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">

Nota: Coloque siempre el elemento meta como un elemento secundario del elemento principal, antes de todos los elementos excepto el título y otros elementos de la meta.

Especificar un CSS para la aplicación el grupo IM correo aplicación especifica una línea CSS en el archivo HTML para controlar el diseño visual y el diseño de la aplicación, como se muestra en figura 5.

Figura 5 especificando un CSS

    <style type="text/css">
      .title{
        font-family: arial, sans-serif;
        color: blue;
        font-size: 12pt;
        text-decoration:none;
        font-weight:bold;
      }
      .property{
        font-family:Segoe UI;
        color: black;
        font-size: 10pt;
        text-decoration:none;
      }
      .value{
        font-family:Segoe UI;
        color: gray;
        font-size:  10pt;
        text-decoration:none;
      }
      .valuesmall{
        font-family: Segoe UI;
        color: gray;
        font-size:  8pt;
        text-decoration:none;
      }
    </style>

Para instrucciones más detalladas, consulte la sección "Estilo directrices para aplicaciones de oficina" (bit.ly/XEwfED) el artículo de MSDN Library, "aplicaciones para oficina UX diseñar directrices".

Incluyendo la API de JavaScript para oficina biblioteca el API de JavaScript para la oficina, office.js, se ofrece en una ubicación de content delivery network (CDN). Siempre utilice la siguiente declaración para office.js de referencia de ese lugar:

    <script type="text/javascript"
      src="https://appsforoffice.microsoft.com/lib/1.0/hosted/office.js"></script>

Esta aplicación de correo utiliza elementos de secuencia de comandos similares para incluir otros archivos de la biblioteca de JavaScript, incluyendo su propio archivo de JavaScript ya mencionado, InstantMessage.js.

Implementación de JavaScript

Como se ve en la sección anterior que describe la regla de la activación de esta aplicación de correo, esta aplicación está disponible en la barra de aplicación cada vez que el usuario ve un mensaje en el panel de lectura o el inspector. Si el usuario elige la aplicación, el archivo de JavaScript (InstantMessage.js) muestra los destinatarios y ninguna dirección de correo electrónico incluidas en el cuerpo del mensaje, obtiene cualquier opciones del usuario y comienza una sesión de mi grupo con las personas seleccionadas.

En lugar de caminar por cómo InstantMessage.js muestra las direcciones de correo electrónico y recibe las opciones del usuario para IM, el resto de esta sección muestra cómo esta aplicación de correo utiliza las características enumeradas en la sección "Fundamentales características de la JavaScript API para oficina" de los MSDN Magazine artículo (msdn.microsoft.com/en-us/magazine/dn201750).

La sincronización con el inicializar y eventos DOM-Loaded cada aplicación para oficina debe controlar el evento Office.initialize. Como se muestra en el siguiente controlador de eventos de inicialización, tan pronto como las aplicaciones para oficina runtime está listo, esta aplicación de correo recibe el mensaje actual seleccionado por el usuario y todas las entidades conocidas que existen en el mensaje:

Office.initialize = function () {
  _Item = Office.context.mailbox.item;
  itemEntities = _Item.getEntities();
  $(document).ready(function () {
   initIM();
  }); 
}

La aplicación tiene hasta que se carga el DOM, cuando entonces llama a la función initIM para proceder a Mostrar la interfaz de usuario de la aplicación con direcciones de correo electrónico.

Acceso a las propiedades del mensaje remitente, a y cc esta aplicación de correo utiliza el remitente, a y cc propiedades disponibles en el objeto de mensaje para permitir al usuario seleccionar uno o más del remitente del mensaje o destinatarios. Cada una de estas propiedades devuelve uno o más EmailAddressDetails objetos, cada uno de los que se asigna a una persona e incluye la dirección SMTP de la persona.

Figura 6 muestra la parte de la función initIM que recibe el correo electrónico de datos de la dirección de la a y cc destinatarios.

Figura 6 conseguir los detalles de dirección de correo electrónico

function initIM()
{
  var myHTMLString;
  var myCell;
  var tempEntities;
  var toRecipients;
  var ccRecipients;
  var recipientsAddresses = new Array ();
  var recipientsAndBodyAddresses = new Array();
  toRecipients = _Item.to;
  ccRecipients = _Item.cc;
  myHTMLString = "";
  // Assign first the To recipients addresses, followed by
  // the cc recipients addresses.
for (var i=0; i<toRecipients.length; i++) {
    recipientsAddresses[i] = toRecipients[i].emailAddress;
  }
  for (var i=0; i<ccRecipients.length; i++) {
    recipientsAddresses[i+toRecipients.length] = 
      ccRecipients[i].emailAddress;
  }
...

El siguiente fragmento de código muestra la parte de la función initIM que tiene acceso a la dirección del remitente del mensaje y lo muestra en la lista de opciones en el panel de la aplicación:

myHTMLString +=
  "<form><span id=\"mySpan\">Start an instant message conversation</span>" +
  " with the following persons:<BR>";
myHTMLString += "<input type=checkbox name='checkbox0" + 
  "' value='" +
  _Item.sender.emailAddress + 
  "' onClick='checkAddress(this.form)' />" +
  _Item.sender.emailAddress + "<br>";

Acceso a direcciones SMTP en el cuerpo del mensaje como entidades el siguiente fragmento de código muestra la parte de la función de inicialización que obtiene el conjunto completo de entidades bien conocidos en el asunto y el cuerpo:

Office.initialize = function () {
  _Item = Office.context.mailbox.item;
  itemEntities = _Item.getEntities();
...

Tenga en cuenta que la función getEntities devuelve un conjunto completo de entidades conocidas, incluyendo cualquier dirección de correo SMTP, que existen en el asunto o el cuerpo de ese mensaje. itemEntities.emailAddresses devuelve sólo una matriz de cadenas que cambio reconoce como direcciones SMTP. El siguiente fragmento de código muestra cómo la función de initIM combina el conjunto de direcciones de destinatarios de correo electrónico con cualquier dirección de correo electrónico que existen en el asunto o el cuerpo y luego llama a la función de makeMyAddressesUnique para excluir cualquier equivalente direcciones SMTP para proporcionar una lista de opciones únicas para el usuario más adelante:

recipientsAndBodyAddresses =
  recipientsAddresses.concat(itemEntities.emailAddresses);
makeMyAddressesUnique (recipientsAndBodyAddresses);

Acceso al perfil de usuario a la dirección del usuario obtener con el fin de evitar que ofrece la dirección de SMTP del usuario como una opción para la sesión IM, la función makeMyAddressesUnique compara las direcciones de correo electrónico con la dirección del usuario almacenada en la propiedad UserProfile.emailAddress. Figura 7 muestra el código.

Figura 7 comparando las direcciones de correo electrónico con la dirección del usuario

// This function counts the unique number of e-mail addresses.
// The first such count number of array cells in
 // myEntities contains the unique e-mail addresses.
function makeMyAddressesUnique (addressArray)
{
  var emailAddress;
  var j=0;
  for (var i in addressArray) {
    emailAddress = addressArray[i];
    // Check if e-mail address is not the same as the sender's address
    // or the current user's address, is new, and
    // has not occurred in the first i number of cells in addressArray.
if ((emailAddress.toLowerCase() !==
      _Item.sender.emailAddress.toLowerCase()) &&
        (emailAddress.toLowerCase() !==
        Office.context.mailbox.userProfile.emailAddress.toLowerCase()) &&
        (emailAddrIsNew (i, emailAddress, addressArray))) {
          myEntities[j] = emailAddress.toLowerCase();
          j++;
    }
    // Otherwise e-mail address occurred in
    // sender or addressArray already, ignore it.
// The next new e-mail address will overwrite cell j in myEntities.
}

Las dependencias del cliente de IM tenga en cuenta que esta aplicación supone que el usuario ha creado un cliente de mensajería instantánea que soporta el IM y los protocolos SIP y usa el siguiente formato para iniciar IM con las direcciones especificadas de SMTP:

im:<sip:user1@host><sip:user2@host>

Como se mencionó, un ejemplo de un cliente de IM es Lync. En Lync, el comando anterior abre una ventana IM para el usuario y direcciones SMTP especificadas si el usuario ya ha firmado en Lync o Lync ha creado para iniciar sesión automáticamente. De lo contrario, el comando abre la ventana de inicio de sesión.

Alternativamente, puede modificar la función de checkAddress en este ejemplo apoyar a un cliente de mensajería diferente y crear el comando correspondiente para que el cliente iniciar el grupo IM.

Para obtener más información sobre el apoyo para Lync, consulte el artículo de MSDN Library, "Lync a partir de otra aplicación" (bit.ly/ZvbTvc).

Medios alternativos para activar

Observe que mi aplicación utiliza activación solamente una regla (el elemento seleccionado un mensaje) y la API de JavaScript (método de Message.getEntities y propiedad de Entities.emailAddresses) para llegar a cualquier dirección de correo SMTP en el cuerpo del mensaje. Voy a mostrar una implementación alternativa para ilustrar un ejemplo de una regla de activación de la expresión regular y cómo conseguir la expresión regular coincide con la aplicación.

En el manifiesto de aplicación, combinar la regla existente de ItemIs usando el modo = y atribuir una segunda regla que el cuerpo del artículo debe contener una o varias direcciones de correo electrónico, como filtrados por la expresión regular llamada reg1:

<Rule xsi:type="RuleCollection" Mode="And">
  <Rule xsi:type="ItemIs" ItemType="Message"/>
  <Rule xsi:type="ItemHasRegularExpressionMatch" RegExName="reg1"
    RegExValue="[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,3}"
    PropertyName="BodyAsPlaintext"/>
</Rule>

Luego, en el archivo de JavaScript, en lugar de acceder a cualesquiera entidades conocidas que cambio ha extraído el mensaje seleccionado, así:

itemEntities = _Item.getEntities();

Puede utilizar el método Message.getRegExMatches para obtener cualquier direcciones de correo electrónico que coincidan con reg1:

myEntities = _Item.getRegExMatches();

Modificar la función makeMyEntitiesUnique para manejar las direcciones de correo electrónico almacenadas en la matriz de myEntities.reg1.

De los dos enfoques, utilizando entidades bien conocidas es preferido para evitar cualquier sobrecarga adicional en la evaluación de una expresión regular al intentar activar la aplicación de correo. Independientemente del tipo de activación reglas especificadas en un manifiesto de aplicación, intercambiar siempre extractos cualesquiera entidades bien conocidos de la materia o el cuerpo del elemento seleccionado, por lo que hay no más arriba incurridos por conseguir cualquier dirección de correo electrónico en el cuerpo del mensaje como entidades. Por otro lado, la sobrecarga de la evaluación de expresiones regulares en una regla de activación puede ser significativa si el cuerpo del correo electrónico es relativamente largo y contiene muchas direcciones de correo electrónico. Para proporcionar una experiencia satisfactoria para el correo de los usuarios de la aplicación, existen determinados límites, que usted debe ser consciente de si utiliza expresiones regulares. Consulte el artículo de MSDN Library "Límites para activación y datos en aplicaciones de correo para Outlook" (bit.ly/170WAQf), para obtener más información.

Angela Chu-Hatoun comenzó como desarrolladora de software y luego cambió a la escritura, debido a su mayor interés en explicar cómo funciona el software. Se ha desempeñado como escritora de programación en la división de Office durante 12 años y escribe para desarrolladores sobre la creación de aplicaciones para Office y para otras soluciones de Outlook. Le gusta leer sobre la actualidad, jardinería, viajes, comida y moda.

Gracias a los siguientes expertos técnicos por su ayuda en la revisión de este artículo: Andrew Salamatov (Microsoft) y Tim Wan (Microsoft)

Tim WAN se graduó de Caltech en 2003 y es Licenciada en ingeniería y ciencias aplicadas. Ha sido desarrollador de software en Outlook durante los últimos nueve años. Ha trabajado exhaustivamente en la característica de aplicaciones de correo de Outlook 2013, así como en el modelo de objetos de Outlook de las versiones anteriores. Espera proporcionar nuevas características y mejoras para los clientes de todo el mundo.

Andrew Salamatov bio tk (o de lo contrario quedará)