Condividi tramite


Il presente articolo è stato tradotto automaticamente.

Microsoft Office

Analisi dell'API JavaScript per Office: Creazione di un'app di posta elettronica di esempio

Angela Chu-Hatoun

Scarica il codice di esempio

Questo articolo accompagna il MSDN Magazine articolo, "esplorando l'API JavaScript per Office: Applicazioni di posta"(msdn.microsoft.com/magazine/dn201750).Qui, vado a piedi attraverso la costruzione di un campione gruppo IM posta app utilizzando le tecniche spiegate in questo articolo.

Inizio gruppo IM da un messaggio

Il gruppo IM posta app consente di conveniente iniziare una sessione di messaggistica istantanea di gruppo con il mittente, i destinatari o le persone cui indirizzi di posta elettronica sono inclusi nel corpo del messaggio selezionato, senza lasciare Outlook o Outlook Web App.Figura 1 Mostra l'utente Belinda dopo aver selezionato i destinatari Jeff e Ben ed essere pronti per iniziare una sessione di chat usando il gruppo IM posta app.Riquadro applicazione include gli indirizzi SMTP di tutti i destinatari del messaggio corrente nel riquadro di lettura, come pure eventuali indirizzi SMTP (per Vernon, Sam e romano) nel corpo del messaggio per Belinda avviare una sessione di chat con.

Selecting Message Recipients in the Group IM Mail App to Start a Group Chat SessionFigura 1 selezionando i destinatari del messaggio nel gruppo IM Mail App per avviare una sessione di Chat di gruppo

Il gruppo IM posta app presuppone Lync come client IM che supporta il protocollo SIP (Session Initiation) e un approccio da riga di comando per avviare IM.È possibile modificare la funzione checkAddress nel file JavaScript di questo app mail, InstantMessage.js, mostrato Figura 2 (è possibile scaricare il set completo di file di origine per l'applicazione di posta elettronica a code.msdn.microsoft.com/Mail-apps-for-Outlook-2b20fc16), per personalizzare l'applicazione per un diverso client IM.

Nella figura 2 il File 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>";
}

Lo Scenario

Durante la lettura di un messaggio e-mail, si vuole portare avanti una discussione di instant-messaging i destinatari del messaggio, o con persone cui e-mail indirizzi sono inclusi nel corpo del messaggio. Si può scegliere il gruppo IM posta app, selezionate nei destinatari del riquadro app o indirizzi dal messaggio di posta elettronica e, senza uscire da Outlook, avviare una sessione di chat di gruppo nel tuo client IM.

Questo scenario presuppone l'utilizzo di Outlook 2013 (o una versione successiva) ed Exchange Online o Exchange Server 2013 (o una versione successiva). I partecipanti e i loro indirizzi SMTP dovrebbero essere supportati anche da client IM.

Cercando l'App Mail

Seguire le istruzioni nel file "Leggimi per gruppo IM mail app," con il download del codice (code.msdn.microsoft.com/Mail-apps-for-Outlook-2b20fc16), per scaricare e installare l'applicazione mail per la cassetta postale. Outlook attiva questa mail app per qualsiasi messaggio di posta elettronica nella posta in arrivo, quindi si può provare questa app mail con qualsiasi messaggio visualizzata nel riquadro di lettura o ispettore della posta. In alternativa, per un ambiente più controllato di prova, si può creare un messaggio di posta elettronica di prova speciale, tra te e pochi altri destinatari, specificare alcuni altri indirizzi SMTP nel corpo del messaggio e invia il messaggio.

Per eseguire il test, aprire il messaggio di prova speciale nel riquadro di lettura e scegliere il pulsante app "Gruppo IM". Il riquadro app elenca gli indirizzi e-mail dei destinatari e gli indirizzi SMTP nel corpo del messaggio. Nel riquadro di app, scegliere due o più indirizzi di posta elettronica e scegliere il link "Avvia una conversazione IM." Il tuo client IM apre una finestra IM per iniziare la sessione di chat di gruppo.

Il resto di questo articolo descrive il manifesto XML, file HTML e JavaScript per il gruppo IM posta app. Lungo la strada, potrai evidenziare punti di interesse.

Il manifesto XML

Ogni mail app deve definire un manifesto che segue i apps per lo schema XML di Office, come documentato nell'articolo di MSDN Library, **"**mappa dello Schema (applicazioni per ufficio)," a bit.ly/13bPpWH. Un manifesto dell'applicazione mail definisce i seguenti metadati per l'app:

  • Identità
  • Supporto locale
  • Capacità necessaria di applicazioni host
  • Form factor
  • File HTML corrispondente per ogni fattore di forma (se necessario)
  • Visualizzare i requisiti
  • Autorizzazioni necessarie
  • Regole di attivazione

Questa sezione evidenzia specifici punti di interesse per il manifesto, IM.xml di Lync, che caratterizzano il gruppo IM posta app. Per un elenco completo del manifesto, vedere Figura 3 (è possibile scaricare il set completo di file di origine per l'app mail a (code.msdn.microsoft.com/Mail-apps-for-Outlook-2b20fc16).

Figura 3 File di manifesto 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>

L'elemento radice OfficeApp specifica lo spazio dei nomi e il tipo di app MailApp ed è l'elemento principale che racchiude gli elementi figlio applicabili alle applicazioni di posta elettronica in un ordine sequenziale. MailApp si estende il sistema, e sui relativi elementi figlio definiscono ulteriori metadati per le applicazioni di posta elettronica:

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

Un identificatore univoco Id elemento specifica un identificatore univoco universale (UUID) che differenzia questo app da altre applicazioni per l'ufficio per l'applicazione host:

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

Un'etichetta App il DisplayName elemento identifica l'applicazione come "Gruppo IM" sulla barra di app. Outlook attiva questa app visualizzando "Gruppo IM" sulla barra di app, se le regole specificate nel manifesto sono soddisfatte per quanto riguarda l'elemento selezionato (vedere la "Attivazione regole" sezione):

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

Supporto locale DefaultLocale l'elemento specifica il nome della lingua delle impostazioni internazionali, in questo caso EN-US, delle stringhe dell'interfaccia utente nel manifesto dell'applicazione. È possibile utilizzare l'elemento figlio di Override per supportare nomi locali specifiche (ad esempio il nome "Messaggio secteurs" per le impostazioni locali FR-FR nell'esempio precedente), descrizioni, immagini di icone o i file di origine:

<DefaultLocale>EN-US</DefaultLocale>

Una descrizione dettagliata descrizione l'elemento tipicamente specifica lo scopo dell'app. L'attributo DefaultValue corrisponde alla localizzazione specificato dall'elemento DefaultLocale. È possibile utilizzare un elemento figlio di Override per sostenere una descrizione per una lingua diversa, ad esempio 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>

Capacità elementi la capacità e la capacità di specificano la funzionalità il vostro app funziona con — in questo caso, la capacità della cassetta postale. Anziché specificare esplicitamente le applicazioni host richiede la tua app, utilizzare questi elementi per dire le applicazioni per la piattaforma Office come abbinare applicazioni host ammissibili che possono supportare il vostro app. Un'applicazione che supporta la funzionalità delle cassette postali può diventare un host per questa app:

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

Perché l'API JavaScript per Office è un'API integrata condivisa da tutte le applicazioni per l'ufficio e supporto applicazioni host, il supporto per alcuni oggetti o membri differisce da host a host. Più di questi casi si verificano con attività riquadro applicazioni (ad esempio, Bindings.addFromPromptAsync). Un esempio per le applicazioni di posta elettronica è la proprietà di Diagnostics.OWAView, che è previsto per il debug in Outlook Web App ma non Outlook. In tali casi, è necessario assicurarsi che l'API è definito prima di utilizzarlo.

File di origine dipendente dal dispositivo e Display il DesktopSettings e TabletSettings elementi specificano che questa app può eseguire sul desktop e tablet fattori di forma. È possibile utilizzare gli elementi SourceLocation e RequestedHeight per specificare i file di origine HTML stessi o dipendente dal dispositivo e visualizzare altezza (in pixel) per l'app. Il gruppo IM posta app utilizza lo stesso file di origine HTML per i fattori di forma desktop e tablet, e specifica un taller riquadro app per desktop rispetto la tavoletta.

Questo è l'URL per il file HTML:

https://webserver/GroupIM/InstantMessage.htm

Prima di provare l'app IM Group, è necessario sostituire l'URL per il file HTML con il percorso effettivo del file HTML nella vostra configurazione:

<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>

Autorizzazione le autorizzazioni elemento specifica il livello di autorizzazione che richiede questa app. In questo caso, il gruppo IM posta app richiede l'autorizzazione lettura elemento perché l'applicazione accede a entità (indirizzi SMTP) che Exchange estrae dal corpo e oggetto del messaggio:

<Permissions>ReadItem</Permissions>

Attivazione regole questa app specifica una regola ItemIs con messaggio come tipo di elemento. Questo significa che Outlook visualizzerà gruppo IM nella barra app ogni volta che l'utente visualizza un messaggio nel riquadro di lettura o di ispezione:

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

Si noti che ci sono alcuni tipi di messaggi che non supportano applicazioni di posta elettronica. Vedere la sezione "Elementi di supporto di attivazione" (bit.ly/11n0hNE) l'articolo di MSDN Library, "definizione delle regole per mostrare un'applicazione di posta elettronica in Outlook 2013," per ulteriori informazioni.

Implementazione HTML

Il file HTML, InstantMessage.htm, specifica l'interfaccia utente dell'applicazione, come visualizzato nel riquadro di app. Questa sezione mette in evidenza alcuni punti di interesse. Per un elenco completo di InstantMessage.htm, vedere Figura 4 (è possibile scaricare il set completo di file di origine per l'applicazione di posta elettronica da code.msdn.microsoft.com/Mail-apps-for-Outlook-2b20fc16).

Figura 4 il File 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>

Utilizzando la modalità Internet Explorer, disponibile più alto applicazioni per ufficio richiedono un minimo di Internet Explorer 9 sul computer client. Utilizzare il seguente tag meta per consentire l'applicazione utilizzare la modalità Internet Explorer più alta disponibile sul computer, per fornire che la migliore esperienza utente possibile ottenere:

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

Nota: Posizionare sempre l'elemento meta come elemento figlio dell'elemento head, prima di tutti gli altri elementi, ad eccezione del titolo e altri elementi di meta.

Specificare un CSS per l'App il gruppo IM posta app specifica un CSS inline nel file HTML per il controllo del visual design e layout di app, come mostrato Figura 5.

Figura 5 specificando 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>

Per ulteriori istruzioni, vedere la sezione "Linee guida per le applicazioni di stile per l'ufficio" (bit.ly/XEwfED) dell'articolo MSDN Library, "applicazioni per ufficio UX design guidelines".

Tra cui l'API JavaScript per ufficio libreria l'API JavaScript per l'ufficio, office.js, viene fornito in una posizione di content delivery network (CDN). Utilizzare sempre la seguente dichiarazione per fare riferimento a office.js da quella posizione:

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

Questa mail app utilizza gli elementi di script simile per includere altri file di libreria JavaScript, tra cui proprio suddetto file JavaScript, InstantMessage.js.

Implementazione JavaScript

Come si è visto nella sezione precedente che descrive la regola di attivazione per questo app mail, questa app è disponibile nella barra app ogni volta che l'utente visualizza un messaggio nel riquadro di lettura o di ispezione. Se l'utente sceglie l'app, i file JavaScript (InstantMessage.js) consente di visualizzare i destinatari ed eventuali indirizzi di posta elettronica incluso nel corpo del messaggio, ottiene eventuali scelte dall'utente e inizia una sessione di chat di gruppo con le persone selezionate.

Piuttosto che a piedi attraverso come InstantMessage.js Visualizza gli indirizzi di posta elettronica e ottiene le scelte dell'utente per la messaggistica istantanea, il resto di questa sezione viene illustrato come questa app di posta utilizza le caratteristiche elencate nella sezione "Fondamentali caratteristiche di JavaScript API per ufficio" di accompagnamento MSDN Magazine articolo (msdn.microsoft.com/en-us/magazine/dn201750).

Sincronizzazione a inizializzare ed eventi DOM-Loaded ogni app per ufficio deve gestire l'evento Office.initialize. Come mostrato nel gestore dell'evento initialize seguente, appena le applicazioni per Office runtime è pronto, questo app mail ottiene il messaggio corrente selezionato dall'utente e tutte le entità ben note che esistono nel messaggio:

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

L'applicazione tiene fino a quando il DOM è caricato, quando poi chiama la funzione initIM per procedere con la visualizzazione dell'app UI con indirizzi di posta elettronica.

Accesso alle proprietà di messaggio mittente, a e cc questa mail app utilizza il mittente, a e cc proprietà disponibile sull'oggetto messaggio per consentire all'utente di scegliere uno o più destinatari o mittente del messaggio. Ognuna di queste proprietà restituisce uno o più EmailAddressDetails di oggetti, ognuno dei quali esegue il mapping a una persona e include l'indirizzo SMTP di una persona.

Figura 6 Mostra la parte della funzione initIM che ottiene l'e-mail dettagli di indirizzo per la a e cc destinatari.

Figura 6 ottenere dettagli indirizzo E-Mail

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;
  }
...

Il frammento di codice seguente viene illustrata la parte della funzione initIM che accede l'indirizzo del mittente messaggio e lo visualizza nell'elenco delle scelte sul riquadro app:

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>";

L'accesso a indirizzi SMTP nel corpo del messaggio come entità il frammento di codice seguente viene illustrata la parte della funzione di inizializzazione che ottiene il completo set di entità ben noto nel corpo e oggetto del messaggio:

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

Si noti che la funzione getEntities restituisce un set completo di entità ben noto — compresi eventuali indirizzi SMTP — che esiste nel soggetto o nel corpo del messaggio. itemEntities.emailAddresses restituisce solo una matrice di stringhe che Exchange riconosce come indirizzi SMTP. Il seguente frammento di codice mostra come la funzione di initIM unisce il set di indirizzi di posta elettronica del destinatario con eventuali indirizzi di posta elettronica che esistono nell'oggetto del messaggio o nel corpo e poi chiama la funzione makeMyAddressesUnique per escludere eventuali indirizzi SMTP equivalenti per fornire un elenco di scelte uniche per l'utente più tardi:

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

L'accesso al profilo utente all'indirizzo dell'utente ottenere al fine di evitare che offre l'indirizzo SMTP dell'utente come una scelta per la sessione di messaggistica immediata, la funzione makeMyAddressesUnique confronta gli indirizzi di posta elettronica con l'indirizzo dell'utente memorizzato nella proprietà UserProfile.emailAddress. Nella Figura 7 viene illustrato il codice.

Figura 7 confrontando gli indirizzi di posta elettronica con l'indirizzo dell'utente

// 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.
}

Dipendenze Client IM si noti che questo app presuppone che l'utente ha istituito un client di messaggistica istantanea che supporta la messaggistica immediata e SIP protocolli e utilizza il formato seguente per avviare IM con gli indirizzi SMTP specificati:

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

Come accennato, un esempio di un client di IM è Lync. Su Lync, il precedente comando apre una finestra IM per l'utente e gli indirizzi SMTP specificati se l'utente ha già effettuato l'accesso a Lync o ha istituito Lync Accedi automaticamente. In caso contrario, il comando apre la finestra di accesso.

In alternativa, è possibile modificare la funzione checkAddress in questo esempio a sostenere un diverso client IM e costruire il comando appropriato per tale client avviare il gruppo IM.

Per ulteriori informazioni sul supporto per Lync, vedere l'articolo di MSDN Library, "A partire da un'altra applicazione Lync" (bit.ly/ZvbTvc).

Mezzi alternativi per attivare

Si noti che la mia implementazione utilizza solo una attivazione regola (l'elemento selezionato è un messaggio) e l'API JavaScript (il Metodo Message.getEntities ed Entities.emailAddresses proprietà) per ottenere qualsiasi indirizzi SMTP nel corpo del messaggio. Vi mostrerò un'implementazione alternativa per illustrare un esempio di un'espressione regolare attivazione regola e come ottenere l'espressione regolare corrisponde in app.

Nel manifesto dell'applicazione, combinare la regola ItemIs esistente utilizzando la modalità = e attributo, con una seconda regola che il corpo dell'elemento deve contenere uno o più indirizzi di posta elettronica, come filtrato dall'espressione regolare denominato 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>

Poi, nel file JavaScript, invece di accedere a qualsiasi entità ben noto che Exchange è estratta dal messaggio selezionato, come questo:

itemEntities = _Item.getEntities();

È possibile utilizzare il Metodo Message.getRegExMatches per ottenere eventuali indirizzi di posta elettronica corrispondenti a reg1:

myEntities = _Item.getRegExMatches();

Modificare la funzione makeMyEntitiesUnique per gestire indirizzi di posta elettronica memorizzati nella matrice myEntities.reg1.

Dei due approcci, utilizzando entità ben noto è preferito evitare qualsiasi sovraccarico supplementare nella valutazione di un'espressione regolare mentre cerca di attivare l'applicazione di posta elettronica. Indipendentemente dal tipo di attivazione regole specificate in un manifesto dell'applicazione, scambio sempre estratti di qualsiasi entità ben noto dal soggetto o dal corpo dell'elemento selezionato, quindi non c'è no ulteriore overhead generato da ottenere eventuali indirizzi di posta elettronica nel corpo del messaggio come entità. D'altra parte, il sovraccarico di valutare le espressioni regolari in una regola di attivazione può essere significativo se il corpo di posta elettronica è relativamente lungo e contiene molti indirizzi di posta elettronica. Per fornire un'esperienza soddisfacente per posta gli utenti di app, ci sono determinate soglie che si dovrebbe essere consapevoli di se si utilizzano le espressioni regolari. Vedere l'articolo di MSDN Library, "Limiti per l'attivazione e dati nelle applicazioni di posta elettronica per Outlook" (bit.ly/170WAQf), per i dettagli.

Angela Chu-Hatoun iniziato come uno sviluppatore di software e passato a scrivere per il suo interesse maggiore che spiega come funziona il software. Lei è stato uno scrittore programmatore nella divisione Office per 12 anni e scrive per gli sviluppatori di creare applicazioni per Office e altre soluzioni per Outlook. Ama leggere su current affairs, giardinaggio, viaggi, cibo e moda.

Grazie ai seguenti esperti tecnici per la revisione di questo articolo: Andrew Salamatov (Microsoft) e Tim Wan (Microsoft)

Tim WAN graduato da Caltech nel 2003 e ha conseguito una laurea in ingegneria e scienze applicate. Per gli ultimi nove anni è stato uno sviluppatore di software in Outlook. Ha lavorato estensivamente la caratteristica di apps di posta in Outlook 2013, come pure il modello oggetti di Outlook nelle versioni precedenti. Egli guarda avanti a portare nuove funzionalità e miglioramenti ai clienti in tutto il mondo.

Andrew Salamatov bio tk (o altrimenti sarà lasciato)