En esta sección, crearemos la primera aplicación ASP.NET proyecto para procesar los Microsoft Graph Data Connect que se exportaron.

Crear un nuevo ASP.NET proyecto

  1. Abra Visual Studio y seleccione Archivo > Nuevo > Project.

  2. En el cuadro de Project nuevo, haga lo siguiente.

    1. Busque ASP.NET web en el cuadro de búsqueda y seleccione la ASP.NET aplicación web (.NET Framework).

    2. Haga clic en Siguiente.

      Captura de pantalla de la Visual Studio de usuario que muestra las opciones para crear un nuevo proyecto mediante ASP.NET web application.

    3. Escriba EmailMetrics para el nombre del proyecto.

    4. Seleccione .NET Framework 4.7.2 para la opción marco.

    5. Seleccione Crear.

    Importante

    Asegúrese de escribir exactamente el mismo nombre para el Visual Studio Project especificado en estas instrucciones de inicio rápido. El nombre del Proyecto de Visual Studio pasa a formar parte del espacio de nombres en el código. El código dentro de estas instrucciones depende de que el espacio de nombres coincida con el nombre del Proyecto de Visual Studio especificado en estas instrucciones. Si usa otro nombre de proyecto, el código no se compilará a menos que ajuste todos los espacios de nombres para que coincidan con el nombre del Proyecto de Visual Studio que especifique al crear el proyecto.

    1. En el nuevo cuadro de ASP.NET proyecto aplicación web, seleccione MVC.
    2. Seleccione Crear.

    Captura de pantalla de la Visual Studio que muestra las opciones para elegir una aplicación web Model-View-Controller (MVC) ASP.NET web.

Agregar y configurar el Azure Storage como un servicio conectado

  1. En la ventana de la herramienta Explorador de soluciones, haga clic con el botón secundario en el nodo Servicios conectados y seleccione Agregar servicio conectado.

    Visual-Studio-Add-Connected-Service

  2. En el cuadro de diálogo Servicios conectados, seleccione el signo verde que se encuentra en la esquina superior derecha del cuadro de + diálogo.

  3. En el cuadro de diálogo Agregar dependencia, seleccione Azure Storage y seleccione Siguiente.

    Una captura de pantalla de la Visual Studio que muestra el cuadro de diálogo Agregar dependencia para la Azure Storage usuario.

  4. En el Azure Storage, seleccione la suscripción y la cuenta de almacenamiento donde exportó los datos en el ejercicio anterior, seleccione Siguiente.

    Una captura de pantalla de la Visual Studio que muestra la configuración Azure Storage, donde selecciona la suscripción y la cuenta de almacenamiento.

  5. Proporcione a la Azure Storage un nombre de AzureStorageConnectionString y seleccione Siguiente.

  6. Seleccione Finalizar.

    Una captura de pantalla de la Visual Studio que muestra el resumen Configurar Azure Storage usuario.

Crear una nueva clase de modelo que se usará para almacenar las métricas de correo electrónico

  1. En la ventana de la herramienta Explorador de soluciones, haga clic con el botón secundario en la carpeta Modelos y seleccione Agregar > clase.

    Una captura de pantalla de la Visual Studio que muestra cómo puede agregar una nueva clase haciendo clic con el botón secundario en la carpeta modelos.

  2. En el cuadro de diálogo Agregar nuevo elemento, seleccione Clase, establezca el nombre del archivo en EmailMetric.cs y seleccione Agregar.

  3. Agregue el siguiente código a la clase EmailMetric que acaba de crear.

    public string Email;
    public double RecipientsToEmail;
    

Crear un nuevo controlador que calcule y muestre los resultados

  1. Haga clic con el botón secundario en la carpeta Controladores y seleccione Agregar > controlador.

  2. En el cuadro de diálogo Agregar scaffolding, seleccione Controlador MVC 5 - Vacío y seleccione Agregar.

  3. Cuando se le pida, asigne al controlador el nombre EmailMetricsController y seleccione Aceptar.

  4. Agregue las siguientes instrucciones using después de las instrucciones using existentes en la parte superior del archivo que contiene la clase EmailMetricsController.

    using System.Collections.Generic;
    using System.Configuration;
    using System.IO;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Web.Mvc;
    using Azure.Storage.Blobs;
    using Azure.Storage.Blobs.Models;
    using Newtonsoft.Json.Linq;
    
  5. Agregue el siguiente código a la clase EmailMetricsController. Se usarán para conectarse a la cuenta Azure Storage que contiene los datos exportados.

    private const string connectionStringName = "AzureStorageConnectionString";
    private const string emailBlobName = "m365mails";
    
    
  6. Agregue el siguiente método a la clase EmailMetricsController. Esto procesará un blob de Azure y actualizará una colección que representa las cuentas de correo electrónico y cuántos destinatarios se combinaron en todos los correos electrónicos encontrados para las cuentas extraídas.

    private async Task ProcessBlobEmails(List<Models.EmailMetric> emailMetrics, BlobClient emailBlob)
    {
        using (var stream = new MemoryStream())
        {
            var response = await emailBlob.DownloadToAsync(stream);
            var pos = stream.Seek(0, SeekOrigin.Begin);
    
            using (var reader = new StreamReader(stream))
            {
    
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    var jsonObj = JObject.Parse(line);
    
                    // extract sender
                    var sender = jsonObj.SelectToken("Sender.EmailAddress.Address")?.ToString();
                    // No sender - skip this one
                    if (string.IsNullOrEmpty(sender)) continue;
    
                    // extract and count up recipients
                    var totalRecipients = 0;
                    totalRecipients += jsonObj.SelectToken("ToRecipients")?.Children().Count() ?? 0;
                    totalRecipients += jsonObj.SelectToken("CcRecipients")?.Children().Count() ?? 0;
                    totalRecipients += jsonObj.SelectToken("BccRecipients")?.Children().Count() ?? 0;
    
                    var emailMetric = new Models.EmailMetric();
                    emailMetric.Email = sender;
                    emailMetric.RecipientsToEmail = totalRecipients;
    
                    // if already have this sender...
                    var existingMetric = emailMetrics.FirstOrDefault(metric => metric.Email == emailMetric.Email);
                    if (existingMetric != null)
                    {
                        existingMetric.RecipientsToEmail += emailMetric.RecipientsToEmail;
                    }
                    else
                    {
                        emailMetrics.Add(emailMetric);
                    }
                }
            }
        }
    }
    
  7. Agregue el siguiente método a la clase EmailMetricsController. Esto enumerará todos los blobs del contenedor especificado de la cuenta Azure Storage y enviará cada uno al método agregado en ProcessBlobEmails() el último paso.

    private async Task<List<Models.EmailMetric>> ProcessBlobFiles()
    {
        var emailMetrics = new List<Models.EmailMetric>();
        var connectionString = ConfigurationManager.ConnectionStrings[connectionStringName];
    
        // Connect to the storage account
        var containerClient = new BlobContainerClient(connectionString.ConnectionString, emailBlobName);
    
        foreach (var blob in containerClient.GetBlobs())
        {
            if (blob.Properties.BlobType == BlobType.Block &&
                // Don't process blobs in the metadata folder
                !blob.Name.StartsWith("metadata/"))
            {
                var blobClient = containerClient.GetBlobClient(blob.Name);
                await ProcessBlobEmails(emailMetrics, blobClient);
            }
        }
    
        return emailMetrics;
    }
    
  8. Agregue la siguiente acción a EmailMetricsController que usará los métodos agregados a esta clase para procesar los correos electrónicos y enviar los resultados a la vista.

    [HttpPost, ActionName("ShowMetrics")]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> ShowMetrics()
    {
        var emailMetrics = await ProcessBlobFiles();
    
        return View(emailMetrics);
    }
    

Crear una nueva vista para la acción de índice EmailMetrics

  1. En la ventana de la herramienta Explorador de soluciones, haga clic con el botón secundario en la carpeta Vistas > EmailMetrics y seleccione Agregar > vista.

  2. En el cuadro de diálogo Agregar nuevo elemento scaffolded, seleccione Vista MVC 5 y, a continuación, seleccione Agregar.

  3. En el cuadro de diálogo Agregar vista, establezca el nombre de vista en Índice, deje los controles de entrada restantes en sus valores predeterminados y seleccione Agregar.

    Captura de pantalla de la Visual Studio muestra cómo agregar una nueva vista denominada index.

  4. Actualice el marcado en el nuevo objeto Views > EmailMetrics > Index.cshtml a lo siguiente. Esto agregará un formulario con un solo botón que envía un POST HTTP a la acción de controlador personalizada agregada en el último paso.

    @{
    ViewBag.Title = "Index";
    }
    
    <h2>Email Metrics</h2>
    
  5. Esta aplicación buscará los datos de correo electrónico de los correos electrónicos extraídos en la cuenta de Azure Blob Storage y mostrará el número total de destinatarios de cada remitente.

    @using (Html.BeginForm("ShowMetrics", "EmailMetrics", FormMethod.Post))
    {
    @Html.AntiForgeryToken()
    <div>
        <button type="submit">View email metrics</button>
    </div>
    
    <div>
        <em>Please be patient as this can take a few moments to calculate depending on the size of the exported data...</em>
    </div>
    }
    

Crear una nueva vista para la acción ShowMetrics de EmailMetrics

  1. En la ventana de la herramienta Explorador de soluciones, haga clic con el botón secundario en la carpeta Vistas > EmailMetrics y seleccione Agregar > vista.

  2. En el cuadro de diálogo Agregar vista, establezca los siguientes valores y deje los controles de entrada restantes en sus valores predeterminados y seleccione Agregar.

    • Nombre de vista: ShowMetrics

    • Plantilla: Lista

    • Clase model: EmailMetric (EmailMetric.Models)

      Una captura de pantalla de la Visual Studio muestra cómo agregar una nueva vista denominada ShowMetrics.

    Sugerencia

    En caso de que no pueda ver el modelo EmailMetric en el cuadro desplegable, cree la solución.

  3. Actualice el marcado en el nuevo objeto Views > EmailMetrics > ShowMetrics.cshtml a lo siguiente. Esto mostrará los resultados de los cálculos.

    @model IEnumerable<EmailMetrics.Models.EmailMetric>
    
    @{
    ViewBag.Title = "ShowMetrics";
    }
    
    <h2>Email Metrics</h2>
    
    <table class="table">
    <tr>
        <th>Sender</th>
        <th>Number of Recipients</th>
    </tr>
    
    @foreach (var item in Model)
    {
    <tr>
        <td>@Html.DisplayFor(modelItem => item.Email)</td>
        <td>@Html.DisplayFor(modelItem => item.RecipientsToEmail)</td>
    </tr>
    }
    
    </table>
    

Actualizar la navegación para tener una forma de llegar al nuevo controlador

  1. En la ventana de la herramienta Explorador de soluciones, busque y abra el archivo Views > Shared > Layout.cshtml.

  2. Reemplace el contenido por el siguiente código.

    <!-- new code -->
    <li>@Html.ActionLink("Email Metrics", "Index", "EmailMetrics")</li>
    

Probar la aplicación

  1. En Visual Studio, seleccione Depurar > Iniciar depuración.

  2. Cuando la aplicación se crea y se carga en una nueva ventana del explorador, selecciona el elemento Métricas de correo electrónico en la barra de navegación superior.

  3. En la página Métricas de correo electrónico, seleccione el botón Ver métricas de correo electrónico.

    Una captura de pantalla de la interfaz ASP.NET aplicación web que muestra el botón ver métricas de correo electrónico.

  4. Cuando se carga la página, verá una lista de direcciones de correo electrónico que se encontraron entre todos los correos electrónicos con una suma de todos los destinatarios enviados entre ellos, como se muestra en un pequeño conjunto de ejemplo en un extracto de correo electrónico de prueba en la siguiente figura.

    Captura de pantalla de la interfaz de ASP.NET web integrada que muestra los resultados de las métricas de correo electrónico de vista.