Criando um serviço de notificação via e-mail com ASP.NET Core, SendGrid e Microsoft Azure

Veja como facilmente começar a usar notificação via e-mail em sua aplicação Web.

Existem diversas razões para utilizarmos notificações via e-mail, certo? Pode ser quando alguém se cadastrar em nosso sistema, ou quando queremos estender nossa notificação além da interna da própria aplicação. Uma funcionalidade desse tipo poderia ser utilizada até por mais de uma aplicação.

Neste novo artigo decidi escrever sobre como implementar envio de e-mails em sua aplicação ASP.NET Core. Você verá como é fácil fazer isso, além de ter acesso a uma camada gratuita com uma boa quantidade de e-mails para testar!

A ferramenta utilizada é o SendGrid, através do Microsoft Azure. Você pode criar a conta diretamente pelo site dele, mas um dos objetivos é começar a se familiarizar com essa plataforma de nuvem.

Repositório do código utilizado: artigo-sendgrid

Vamos lá?

Microsoft Azure

Se você ainda não tiver sua conta registrada no Microsoft Azure, recomendo fazê-lo! Deixo aqui o passo-a-passo de como criar uma conta gratuita no Azure. Esse primeiro passo em computação na nuvem pode abrir muitas portas em sua carreira no futuro!

Criando um serviço SendGrid

Primeiramente, realizamos o login no Azure Portal.

Após isso, acessamos o menu esquerdo lateral e selecionamos “Create a resource”, ou seu correspondente no idioma que estiver utilizando.

Será exibida uma tela como a abaixo. Ali buscamos por “SendGrid”, que é o serviço de envio de e-mails a ser utilizado.

Na lista de resultados selecionamos “SendGrid”. Na tela seguinte, selecionamos “Create” para poder começar a configuração do serviço.

A tela de configuração de conta do serviço SendGrid será aberta. Os dados a serem preenchidos são os seguintes:

  • Subscription: o nome de sua assinatura do Microsoft Azure;
  • Resource Group: agrupamento lógico de recursos do Microsoft Azure. Normalmente agrupamos recursos relacionados a uma mesma aplicação no mesmo Resource Group;
  • Location: localização dentro de uma região, onde a instância do serviço estará armazenada;
  • Name: nome associado à conta;
  • Password & Confirm Password: senha e confirmação de senha da conta, respectivamente;
  • Pricing Tier: camadas de serviço disponíveis. Aqui escolhemos a Free, porque… bom, é a gratuita! =) Ela já permite o envio de 25,000 e-mails por mês, o que já dá para testar um pouco em nossos projetos, certo?

Após revisar as informações e clicar em “Review + Create”, finalizamos a criação do recurso apertando em “Create”.

Aguarde a criação do recurso ser finalizada para poder acessá-lo.

A próxima fase é obter a API Key para poder utilizar em nossa aplicação.

Obtendo a API Key

Na tela da imagem anterior, apertamos em “Manage”. Uma nova janela será aberta, na qual poderemos acessar o menu esquerdo lateral e selecionar “API Keys”, que está na categoria “Settings”.

Apertamos então no botão no canto direito superior “Create API Key”. Um menu lateral direito surgirá, no qual definiremos o nome da API Key e o nível de permissão. Para simplificar, selecionamos o “Full Access”.

Finalmente, nossa API Key será exibida e devemos guardá-la em um lugar seguro. A utilizaremos mais para frente quando formos configurar nossa aplicação.

Configurando a API

Com o recurso do SendGrid criado no Microsoft Azure e nossa API Key devidamente gerada e guardada, resta a parte final de criar e configurar nossa API.

O projeto ASP.NET Core

Criamos um projeto ASP.NET Core Web Application. O nome fica a seu critério, e o template será “API”.

Instalando os pacotes necessários

Com o projeto criado, precisaremos instalar os seguintes pacotes para configurar o SendGrid devidamente para nossa aplicação. São eles: SendGrid e SendGrid.Extensions.DependencyInjection. Instalamos eles com os comandos abaixo.

Tendo os pacotes instalados, vamos para a fase seguinte: configurar a classe Startup.

Configurando o SendGrid na classe Startup

Com a API Key gerada anteriormente, configuramos o SendGrid no método ConfigureServices da classe Startup.

Nesse artigo eu utilizo o arquivo appSettings.json para armazenar a chave. Porém, em um projeto “real”, você normalmente vai querer utilizar uma variável de ambiente ou o Azure Key Vault, já que é essencial manter essa API Key protegida.

Implementando o Controller e o envio de e-mail

Para esse artigo, criamos um Controller simples, que receberá as informações de e-mail de destino, assunto e corpo do e-mail. Para poder realizar o envio do e-mail precisaremos da interface ISendGridClient. Junto a ela, usamos as seguintes classes:

  • EmailAddress: Do namespace SendGrid.Helpers.Mail, usamos para definir o e-mail e nome a ser exibido. Usada tanto para a fonte, quanto o destino do e-mail.
  • SendGridMessage: Do mesmo namespace de EmailAdress, é usada para definição das propriedade From e Subject, que recebem um EmailAddress e um string, respectivamente. Essa classe oferece os métodos AddContent (para adição de conteúdo no corpo do e-mail) e AddTo (adição do destinatário).

Antes de implementar o endpoint da API, criei uma classe que vai servir de entrada para os dados de notificação.

Logo abaixo coloco o código completo do Controller. Note que eu defini o tipo de conteúdo com o MimeType.Html. Isso permite que o front-end envie para a API um código em HTML, que será renderizado no e-mail.

Apenas resta testarmos a nossa API de notificação!

Testando a API

Para testar a nossa API, utilizarei o Postman. Usarei a URL do endpoint, e farei uma requisição HTTP POST contendo os dados da notificação no corpo dela.

Recebemos a resposta de código Accepted (202), que representa um sucesso. Após alguns segundos, podemos verificar no e-mail de destino utilizado, que ali estará o e-mail, com os dados que utilizamos! Provavelmente ele estará na pasta de Spam, mas calma! Aqui estão dicas de como evitar que isso ocorra.

E aqui o conteúdo (sim, meu e-mail está em espanhol haha).


Inscreva-se na lista de espera do Método .NET Direto ao Ponto, um treinamento completo sobre C#, APIs com ASP.NET Core e Microsserviços:  Inscreva-se aqui.

São quase 200 vídeo-aulas sobre temas como C#, ASP NET Core 5, EF Core, CQRS, Clean Architecture, Autenticação e autorização com JWT, Testes Unitários, além de mini-cursos em Microsserviços, Performance em .NET, ASP NET Core e Azure, Docker, Carreira Internacional em .NET, e mais.


Conclusão

Concluimos o artigo com uma API construída que pode ser utilizada por um ou mais sistemas, assim como com código que pode ser utilizado para um serviço da camada de infraestrutura, mantido para o próprio projeto.

Espero que tenha sido útil, até o próximo artigo!