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