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.
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:
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:
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.
Si tienes más preguntas o sigues encontrando problemas, déjame saber en los "comentarios" y estaré encantado de ayudarte.