Instalación
Un único paquete de NuGet para .NET 8 y posteriores y para .NET Standard 2.0, sin dependencias en .NET 8.
Instalación
La versión actual es 0.0.1. Tiene un método para cada método del SDK de TypeScript, y la comprobación de paridad del paquete hace fallar la compilación cuando falta alguno o envía una petición distinta.
dotnet add package OpenEmailusing OpenEmail; var client = new OpenEmailClient(); var sent = await client.Emails.SendAsync(new Body{ ["from"] = "Acme Billing <[email protected]>", ["to"] = "[email protected]", ["subject"] = "Your September invoice", ["html"] = "<p>Invoice attached.</p>",}); Console.WriteLine($"{sent["id"]} {sent["status"]}");new OpenEmailClient() lee la clave de OPENEMAIL_API_KEY, así que el código no contiene ninguna credencial. Pasa new OpenEmailOptions { ApiKey = ... } cuando tu configuración esté en otro sitio. Una clave ausente o mal formada lanza ArgumentException al construir el cliente, antes de que se envíe nada.
El cuerpo de una petición es un Body, o cualquier IReadOnlyDictionary<string, object?>, cuyas claves conservan los nombres de la API, así que scheduledAt se escribe aquí igual que en la referencia de la API. Una respuesta es un JsonObject de System.Text.Json.Nodes, que se lee con sent["id"].
Que SendAsync devuelva un resultado no significa que el mensaje haya salido. Un envío programado o cancelable vuelve como queued o scheduled y se resuelve más tarde. Lee status, no el hecho de que la llamada haya devuelto algo.
Pruébalo en un solo archivo
En .NET 10 un solo archivo se ejecuta sin proyecto. La línea #:package descarga el paquete, y dotnet run send.cs envía el mensaje.
#:package OpenEmail@* using OpenEmail; var client = new OpenEmailClient(); var sent = await client.Emails.SendAsync(new Body{ ["from"] = "[email protected]", ["to"] = "[email protected]", ["subject"] = "Sent from one file", ["text"] = "No project was needed.",}); Console.WriteLine(sent["id"]);Dónde funciona
El paquete apunta a net8.0 y netstandard2.0. En .NET 8 y posteriores no tiene dependencias, y es seguro recortarlo y compilarlo de forma anticipada. En .NET Standard 2.0 trae System.Text.Json y Microsoft.Bcl.AsyncInterfaces. Un cliente se puede usar con seguridad desde muchos hilos a la vez: crea uno cuando arranque el programa y compártelo.
El cliente lleva una clave de API del espacio de trabajo que puede enviar correo y leer el buzón, así que su sitio es un servidor, un trabajo en segundo plano o una herramienta que se ejecute en tu propia máquina. Guarda la clave en una variable de entorno o en los secretos de tu framework, nunca en el código.