.NET

24 jan, 2019

ASP .NET Core 2 – Enviando e-mails com Razor Pages

100 visualizações
Publicidade

Neste artigo vou mostrar como enviar e-mails com Razor Pages na ASP .NET Core 2.

Na ASP .NET Core 2.0 podemos usar as classes do namespace System.Net.Mail para enviar e-mails, e podemos fazer isso usando Razor Pages.

Não sei se a sugestão vai ser atendida, mas a Microsoft está recomendando a utilização das Razor Pages para gerar HTML do lado do servidor.

De qualquer forma vamos mostrar como enviar e-mail usando Razor Pages e para isso definiremos um modelo de domínio para representar uma mensagem e vamos usar a página Contact que é criada por padrão quando criamos um projeto usando o template Razor Page.

Ao trabalho!

Recursos:

  • VS 2017 Community

Criando o projeto Razor Pages

Abrindo o VS 2017 e criando um novo projeto teremos as seguintes operações:

  • Create New Project;
  • Visual C# > Web > ASP .NET Core Web Application;

  • Informe o nome RzPg_EnviaEmail;
  • Clique em OK, selecione o template Web Application e marque ASP .NET Core 2.1;

Ao clicar no botão OK você obteve o projeto criado com a estrutura de arquivos mostrada na figura abaixo:

Vamos criar uma pasta chamada Model no projeto e nesta mesma pasta, criar a classe Mensagem com o código abaixo:

Agora faremos os seguintes ajustes no arquivo Contact.cshtml.cs da pasta Pages:

Incluímos uma uma propriedade do tipo Mensagem com o mesmo nome e renomeamos a propriedade Message para Saudacao.

Observe que a propriedade Mensagem está decorada com o atributo [BindProperty], o que assegura que ela vai participar do model binding.

Agora vamos alterar o código do arquivo Contact.cshtml para criar um formulário para o envio do e-mail usando tag-helpers.

O formulário é muito simples. Fique à vontade para melhorará-lo.

A seguir, para que a classe Page model, seja responsável apenas pelo processamento da entrada e retorno da resposta HTML. Vamos criar uma pasta Service e nesta pasta criar a interface IEMailService com o código abaixo:

A implementação desta interface será a responsável por enviar o e-mail.

Na mesma pasta crie então a classe SmtpEMailService e defina o código abaixo nesta classe que implementa o método Send da interface:

Criamos uma instância da classe SmtpClient() do namespace System.Net.Mail que permite enviar e-mails via SMTP.

Veja detalhes da documentação desta classe neste link: https://docs.microsoft.com/pt-br/dotnet/api/system.net.mail.smtpclient?redirectedfrom=MSDN&view=netframework-4.7.2

Estamos salvando os e-mails enviados a serem processados pelo servidor SMTP local na pasta c:\dados\email.

Para poder usar o serviço, precisamos registrar usando o método ConfigureServices() de forma a usar a instância do serviço no construtor da classe ContactModel:

Finalmente, na classe ContactModel vamos injetar uma instância do serviço via injeção de dependência e definir no método OnPost() o envio do e-mail:

O serviço de e-mail é injetado na classe de modelo de página por meio de seu construtor e, em seguida, é atribuído a um campo particular para uso posterior no método do manipulador OnPost.

Executando o projeto e acessando o link Contact, iremos acessar o formulário para envio de e-mail:

Após enviar o e-mail verificando a pasta c:\dados\, veremos o e-mail conforme na figura abaixo:

Pegue o projeto completo aqui: RzPg_EnviaEmail.zip