¿Cuál es el tiempo de respuesta promedio del método SendAsync para enviar un correo?

Desarrollo ITC 120 Puntos de reputación
2025-03-13T21:40:04.8966667+00:00

Hola, estoy generando un servicio haciendo uso del siguiente ejemplo:

https://github.com/Azure-Samples/communication-services-dotnet-quickstarts/blob/main/SendEmailAdvanced/SendEmailWithInlineAttachments/Program.cs

El tiempo que se tarda en enviar el correo mediante el método SendAsync es de 6 segundos en promedio.

Me refiero a esta parte:Imagen del usuario

¿El tiempo de respuesta que obtengo es el correcto? ¿Es posible hacer alguna optimización en mi código o en el portal de Azure para reducir ese tiempo?

Cualquier comentario sobre esto lo agradecería mucho.

Saludos,

DESARROLLO ITC.

Azure Key Vault
Azure Key Vault

Servicio de Azure que se usa para administrar y proteger las claves criptográficas y otros secretos que usan las aplicaciones y los servicios en la nube.

0 comentarios No hay comentarios

Respuesta aceptada por el autor de la pregunta
Suresh Chikkam 2,245 Puntos de reputación Moderador
2025-03-14T06:45:12.3433333+00:00

Hola @Desarrollo ITC ,

Uno de los principales motivos del retraso en el envío del correo electrónico es el uso de WaitUntil.Completed, que espera hasta que todo el proceso de envío haya finalizado antes de devolver una respuesta. Si cambias a WaitUntil.Started, la función regresará inmediatamente después de que Azure acepte la solicitud, reduciendo el tiempo de espera a aproximadamente 1-2 segundos.

Actualmente estás usando esto:

EmailSendOperation emailSendOperation = await emailClient.SendAsync(WaitUntil.Completed, emailMessage);

Resultado:

enter image description here

Después de modificar el código de la referencia de GitHub:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
using Azure;
using Azure.Communication.Email;
class Program
{
    static async Task Main(string[] args)
    {
        // Obtener de forma segura la cadena de conexión de ACS desde las variables de entorno
        string connectionString = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
        if (string.IsNullOrEmpty(connectionString))
        {
            Console.WriteLine("Error: La cadena de conexión de ACS no está configurada. Asegúrate de establecerla en las variables de entorno.");
            return;
        }
        var emailClient = new EmailClient(connectionString);
        var sender = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
        var recipient = new EmailAddress("******@gmail.com", "Suresh");
        string imagePath = @"C:\Users\xxxxxxxxx\Downloads\profile picture.jpeg";
        string base64Image = ConvertImageToBase64(imagePath);
        if (string.IsNullOrEmpty(base64Image))
        {
            Console.WriteLine("Error: No se pudo cargar la imagen. Verifica la ruta del archivo.");
            return;
        }
        var emailContent = new EmailContent("Correo de prueba con medición de tiempo de ejecución")
        {
            PlainText = "Este es un correo de prueba con una imagen incrustada.",
            Html = $"<html><h1>¡Hola!</h1><img src=\"data:image/jpeg;base64,{base64Image}\" /></html>"
        };
        var emailMessage = new EmailMessage(sender, new EmailRecipients(new List<EmailAddress> { recipient }), emailContent);
        // Iniciar el temporizador
        Stopwatch stopwatch = Stopwatch.StartNew();
        try
        {
            Console.WriteLine("Enviando correo electrónico...");
            EmailSendOperation emailSendOperation = await emailClient.SendAsync(WaitUntil.Started, emailMessage);
            // Detener el temporizador
            stopwatch.Stop();
            Console.WriteLine($"Solicitud de correo aceptada. Puedes rastrearla con el ID de operación: {emailSendOperation.Id}");
            Console.WriteLine($"Correo enviado en {stopwatch.Elapsed.TotalSeconds:F2} segundos.");
        }
        catch (RequestFailedException ex)
        {
            stopwatch.Stop();
            Console.WriteLine($"Error al enviar el correo: {ex.ErrorCode}, {ex.Message}");
            Console.WriteLine($"Tiempo de ejecución: {stopwatch.Elapsed.TotalSeconds:F2} segundos.");
        }
        catch (Exception ex)
        {
            stopwatch.Stop();
            Console.WriteLine($"Error inesperado: {ex.Message}");
            Console.WriteLine($"Tiempo de ejecución: {stopwatch.Elapsed.TotalSeconds:F2} segundos.");
        }
    }
    static string ConvertImageToBase64(string filePath)
    {
        if (!File.Exists(filePath))
        {
            Console.WriteLine($"Error: Archivo no encontrado - {filePath}");
            return string.Empty;
        }
        try
        {
            byte[] imageBytes = File.ReadAllBytes(filePath);
            return Convert.ToBase64String(imageBytes);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error al leer el archivo: {ex.Message}");
            return string.Empty;
        }
    }
}

Resultado:
enter image description here

Estoy traduciendo las respuestas del inglés, así que por favor disculpa cualquier error gramatical.

Espero que esto te ayude.


No olvides hacer clic en "Aceptar la respuesta" y "Sí" si la información proporcionada te ha sido útil, esto puede ser beneficioso para otros miembros de la comunidad.

Imagen del usuario

Si tienes más preguntas o sigues encontrando problemas, déjame saber en los "comentarios" y estaré encantado de ayudarte.

¿Le resultó útil esta respuesta?

0 comentarios No hay comentarios

0 respuestas adicionales

Ordenar por: Lo más útil

Su respuesta

Las respuestas pueden ser marcadas como Respuestas aceptadas por el autor de la pregunta, lo que indica a los usuarios que la respuesta resolvió su problema.