Instalar
Um único pacote NuGet para o .NET 8 e posteriores e para o .NET Standard 2.0, sem dependências no .NET 8.
Instalar
A versão atual é a 0.0.1. Tem um método para cada método do SDK de TypeScript, e a verificação de paridade do pacote faz falhar a compilação quando falta algum ou quando envia um pedido diferente.
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() lê a chave de OPENEMAIL_API_KEY, por isso o código não guarda nenhuma credencial. Passe new OpenEmailOptions { ApiKey = ... } quando a sua configuração estiver noutro sítio. Uma chave em falta ou mal formada lança ArgumentException quando o cliente é criado, antes de qualquer envio.
O corpo de um pedido é um Body, ou qualquer IReadOnlyDictionary<string, object?>, cujas chaves mantêm os nomes da API, por isso scheduledAt escreve-se aqui tal como na referência da API. Uma resposta é um JsonObject de System.Text.Json.Nodes, lido com sent["id"].
O facto de SendAsync ter terminado não significa que a mensagem tenha partido. Um envio agendado ou cancelável volta como queued ou scheduled e resolve-se mais tarde. Leia status, e não o facto de a chamada ter terminado.
Experimente num único ficheiro
No .NET 10, um único ficheiro corre sem projeto. A linha #:package obtém o pacote, e dotnet run send.cs envia a mensagem.
#: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"]);Onde corre
O pacote tem como destino net8.0 e netstandard2.0. No .NET 8 e posteriores não tem dependências, e é seguro apará-lo e compilá-lo antecipadamente. No .NET Standard 2.0 traz System.Text.Json e Microsoft.Bcl.AsyncInterfaces. Um cliente pode ser usado com segurança por muitas threads ao mesmo tempo: crie um quando o programa arranca e partilhe-o.
O cliente transporta uma chave de API do espaço de trabalho que pode enviar correio e ler a caixa de correio, por isso o seu lugar é num servidor, numa tarefa ou numa ferramenta que corra na sua própria máquina. Guarde a chave numa variável de ambiente ou nos segredos do seu framework, nunca no código.