Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
1h 11m 27s
Bem-vindo a um olhar abrangente sobre o envio de e-mails em um aplicativo C# Windows Forms usando as percepções da "C# App Start To Finish – Lesson 26" de Tim Corey. Nesta lição, Tim demonstra como construir uma funcionalidade que envia e-mails aos usuários, particularmente no contexto de um aplicativo rastreador de torneios.
E-mails transacionais — mensagens automatizadas e personalizadas acionadas por ações do usuário — são essenciais para aplicativos web modernos. Aplicativos web C# frequentemente dependem de APIs de e-mail transacional, como Mailgun e SendGrid, para entrega confiável e escalável de e-mails prontos para produção.
Este artigo o guiará pelo processo que Tim demonstra, incluindo decidir onde colocar o código de e-mail, criar métodos auxiliares, construir e-mails dinâmicos e enviá-los usando as bibliotecas integradas do C#. O Visual Studio é o IDE principal para desenvolver e testar a funcionalidade de e-mail em aplicativos C#.
Plataformas de entrega de e-mails como Mailtrap podem ser usadas para monitorar a entregabilidade e testar o envio de e-mails durante o desenvolvimento.
Tim começa lembrando-nos do requisito principal: apenas uma rodada de um torneio pode ser jogada por vez. Isso significa que, uma vez que uma rodada é concluída, as equipes precisam ser notificadas sobre sua próxima partida. Esses e-mails de notificação são um tipo de e-mail transacional, geralmente enviados automaticamente em resposta a ações dos usuários em aplicativos web. O e-mail é uma solução prática para garantir que os participantes sejam informados imediatamente, e Tim orienta a construção dessa funcionalidade passo a passo.
Usar um serviço de e-mail dedicado, como o Amazon SES, pode ajudar a garantir uma entrega confiável e escalável desses e-mails transacionais.
Tim começa abordando uma questão crucial: Onde deve ir a lógica de e-mail? Ele explica que deve ser colocada onde o aplicativo já está realizando a lógica principal do torneio. Neste caso, o melhor lugar é dentro do método UpdateTournamentResults.
Por que aqui? Porque este método lida com:
Determinar vencedores dos confrontos
Avançando equipes para a próxima rodada
Atualizando banco de dados ou armazenamento de arquivos
Ao colocar a lógica de e-mail aqui, enviamos e-mails apenas após uma rodada ser concluída, evitando spammar usuários desnecessariamente.
Tim introduz uma estratégia de rastreamento da rodada atual antes e depois de atualizar os resultados:
Se o número da rodada mudar, sabemos que uma nova rodada começou.
Isso aciona as notificações de e-mail para usuários sobre confrontos futuros.
Para determinar se uma rodada mudou, Tim cria um método de extensão chamado CheckCurrentRound. Este método itera por todas as rodadas no modelo do torneio e verifica se todos os confrontos de uma rodada têm um vencedor.
Se todos os confrontos estiverem completos, ele incrementa uma variável de saída.
Se uma rodada estiver incompleta, ele para de verificar rodadas adicionais.
Este método retorna o número da rodada atual após avaliar o estado do torneio.
Tim enfatiza que começar a saída em 1 trata de casos onde nenhuma rodada está completa ainda. Usando este método, o aplicativo pode detectar dinamicamente quando uma nova rodada começa e disparar e-mails.
Tim defende a criação de uma classe dedicada EmailLogic. Esta abordagem:
Mantém o código relacionado a e-mails separado da lógica de torneio
Torna-o reutilizável em todo o aplicativo
Ajuda em expansões futuras, como enviar lembretes de pagamento ou resumos de torneio
Usar uma biblioteca cliente de e-mail dedicada, como MailKit, é recomendado para aplicativos modernos de C#, pois oferece recursos robustos e melhor suporte em comparação com a classe desatualizada SmtpClient.
Ele configura um método estático público chamado SendEmail com parâmetros:
De (e-mail do remetente)
Para (e-mails dos destinatários)
Assunto
Corpo
A classe BodyBuilder do MailKit pode ser usada para construir e-mails HTML e adicionar anexos de forma eficiente, facilitando o envio de e-mails com arquivos como PDFs.
Tim sugere mantê-lo simples para a primeira versão, com CC e BCC adicionados posteriormente, se necessário.
Uma vez que a rodada atual é determinada, Tim extrai uma lista de confrontos para essa rodada usando LINQ. Cada confronto contém entradas para duas equipes competidoras.
Para cada confronto, ele percorre:
Cada entrada de equipe
Cada membro da equipe
Isso garante que cada indivíduo receba um e-mail sobre seu próximo confronto. Ao enviar e-mails para múltiplos destinatários, a classe InternetAddressList e o método AddRange podem ser usados para adicionar todos os endereços de e-mail dos destinatários de uma só vez. Também é importante verificar cada endereço de e-mail do destinatário para garantir a entrega bem-sucedida.
Tim enfatiza a importância de reunir todas as informações necessárias, como:
O nome e e-mail do participante
O nome da equipe deles
O nome da equipe adversária
Tim então se concentra em construir o assunto e o corpo do e-mail dinamicamente:
Assunto: Simples e direto, por exemplo, "Você tem um novo confronto com a Equipe Rolling Thunder." O assunto é geralmente definido usando uma variável de string subject no código, que é então atribuída à mensagem de e-mail.
Corpo: Tim usa um StringBuilder para concatenar eficientemente várias linhas de texto. Ele explica que adicionar strings repetidamente em C# é ineficiente, pois cada adição cria novas alocações de memória.
Ao gerar o conteúdo do e-mail, Tim considera se deve enviar um e-mail de texto simples ou um e-mail HTML. E-mails de texto simples são simples, compatíveis com todos os clientes de e-mail e frequentemente usados para notificações internas ou mensagens transacionais. E-mails HTML, por outro lado, permitem um formatação mais rica. Enviar versões tanto em HTML como em texto simples pode melhorar a entregabilidade e garantir compatibilidade com vários provedores de serviço de e-mail. Você pode enviar e-mails HTML em C# ajustando a propriedade IsBodyHtml da classe MailMessage para true, ou usando a biblioteca MailKit e modificando o corpo da mensagem para incluir conteúdo HTML.
Usar StringBuilder permite à aplicação:
Lidar com várias linhas para uma mensagem personalizada
Incluir detalhes como a equipe adversária e informações da rodada
Evitar problemas de desempenho mesmo ao enviar centenas de e-mails
Tim também lida com casos especiais, como uma semana de bye, onde uma equipe não tem um adversário.
Antes de enviar, Tim verifica se o participante possui um endereço de e-mail válido. Ele observa:
Mesmo uma verificação simples de uma string vazia previne erros
Validações abrangentes (como regex) são possíveis, mas podem ser caras para grandes conjuntos de dados
Para a maioria dos aplicativos, verificar a existência de um e-mail é suficiente
Este passo garante que somente participantes que forneceram e-mails recebem notificações.
Tim explica que o e-mail do remetente deve ser armazenado no App.config para flexibilidade. Ele adiciona:
senderEmail para o endereço de e-mail real
senderDisplayName para o nome do remetente
Muitos serviços de e-mail, como o Amazon SES, exigem verificação de domínio para garantir a devida entregabilidade e evitar filtros de spam. Este processo envolve adicionar e verificar seu domínio antes de poder enviar e-mails de forma confiável através de sua API.
Mais tarde, um ajudante GlobalConfig recupera esses valores. Esta abstração permite que as informações do remetente sejam alteradas sem modificar o código da lógica de e-mail.
Para enviar e-mails, Tim usa o namespace System.Net.Mail, que está embutido no C#. As etapas incluem:
Crie um novo MailAddress para o remetente, incluindo o nome de exibição. Ao configurar um novo endereço de e-mail, certifique-se de definir corretamente as configurações de conta e autenticação para envio programático de e-mails.
Instancie um objeto MailMessage
Adicione endereços de e-mail de destinatários
Defina o assunto e o corpo
A classe MailMessage permite adicionar anexos usando a propriedade Attachments. Você pode enviar e-mails HTML em C# definindo a propriedade IsBodyHtml da classe MailMessage para true.
Finalmente, Tim configura o cliente SMTP para enviar o e-mail:
Configure host, porta, credenciais, e habilite SSL se necessário. Embora você possa usar seu próprio servidor SMTP, usar um serviço de e-mail baseado em nuvem, como o Amazon Simple Email Service (SES), é frequentemente mais confiável e escalável.
Chame Send(mail) para transmitir a mensagem
Isso lida com o envio de e-mails através de servidores SMTP padrões como Gmail, Outlook, ou um servidor personalizado, ou através de um serviço de e-mail como Amazon SES, Mailgun, ou Mailtrap.
Amazon SES (Simple Email Service) é um serviço de e-mail econômico e escalável oferecido pela AWS para enviar e-mails transacionais rapidamente. Para integrar o Amazon SES ao seu aplicativo C#, você precisa instalar o Pacote AWS SES e pode precisar usar um token de autenticação para acesso seguro. O acesso seguro ao aplicativo é importante ao configurar as configurações de SMTP, especialmente ao usar serviços como Gmail ou Office365, para garantir a devida autenticação e segurança.
Ele observa que servidores de e-mail frequentemente impõem restrições no endereço "De" por segurança, e testar com um servidor dummy ou sandbox é recomendado.
Para recapitular o processo de Tim:
Detectar a rodada atual do torneio antes de atualizar os resultados
Atualizar os resultados do torneio e detectar se a rodada avançou
Extrair confrontos para a nova rodada
Percorrer todos os participantes e membros da equipe
Gerar assuntos e corpos de e-mail dinâmicos
Validar endereços de e-mail
Recuperar informações do remetente do App.config via GlobalConfig
Enviar e-mails usando MailMessage e SmtpClient
Para enviar e-mails transacionais em escala, é recomendável usar APIs de e-mail transacional como SendGrid ou Mailgun. Muitos serviços oferecem um plano gratuito para testes iniciais—SendGrid, por exemplo, permite enviar 100 e-mails por dia e fornece análises de desempenho do e-mail. Sempre use variáveis de ambiente ou cofres seguros como Azure Key Vault ou AWS Secrets Manager para armazenar credenciais sensíveis em seus aplicativos C#. Durante o desenvolvimento, você pode usar .NET run para iniciar sua aplicação e testar a funcionalidade de envio de e-mails.
Tim enfatiza abstração e modularidade: ao isolar a lógica de e-mail, o aplicativo se torna mais fácil de manter, testar e expandir.
A aula de Tim Corey demonstra que enviar e-mails em um aplicativo C# é mais do que apenas chamar SmtpClient.Send(). Requer consideração cuidadosa de quando enviar e-mails, reunir informações relevantes, validar destinatários, e estruturar o código para manutenção. O framework .NET oferece suporte robusto para envio de e-mails via o Protocolo de Transferência de Correio Simples (SMTP), que é a maneira mais comum de enviar e-mails de um aplicativo C#.
Seguindo a abordagem de Tim, os desenvolvedores podem construir funcionalidades de e-mail robustas e reutilizáveis que podem escalar com seus aplicativos, seja um rastreador de torneios, sistema de notificações ou outros serviços baseados em usuários. Usar bibliotecas modernas e protocolos como o SMTP garante uma funcionalidade de e-mail confiável e fácil de manter em aplicativos C#.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy