Realizado

Envio de e-mail de confirmação a partir de aplicação em .Netcore (backend)

Publicado em 13 de Fevereiro de 2022 dias na TI e Programação

Sobre este projeto

Aberto

Este projeto envolve duas tasks de BACKEND .NETCORE:
A primeira, conforme você pode ver no vídeo anexado a esta tarefa. Em ambiente local, na máquina do desenvolvedor o código .netcore já envia o email de confirmação. Contudo, quando publica o projeto em ambiente de qa e prod estas funcionalidades não rodam.



Então pode ser que seja uma questão de configuração do servidor Linux Ubuntu 20.04 que fica na digital Ocean.

A segunda, é refatorar o código para que ao invés de enviar o email @gmail.com ele envie o email oficial da empresa @supplycompliance.com que está no Workspace, antigo GSuite.

Ao enviar o valor da proposta, envie uma estimativa total considerando seu valor hora. Por exemplo se você acredita que levara em torno de 10 horas e sua hora é de R$ 70, então envie a proposta como R$ 700 (setecentos reais).

informacoes tecnicas:
.net 3.1
O ssl só checar se nao é autoassinado? Verificar?!?
Ambiente qa e prod na digital oceal
linux ubuntu 20.04.01  LTS

Contexto Geral do Projeto

Codigo fonte ################ using mimekit; using mailkit.Net.Smtp; using Supply.CrossCutting.Notification.Interfaces; using Supply.CrossCutting.Notification.ViewModels; using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Linq; using Supply.CrossCutting.Log.Interfaces; using Supply.CrossCutting.Log.Enums; using Supply.CrossCutting.ExceptionHandler.Extensions; using System.IO; using MimeKit.Utils; using MailKit.Security; namespace Supply.CrossCutting.Notification.Services { public class EmailSender : IEmailSender { private readonly EmailConfiguration _emailConfig; private readonly ILogService logService; public EmailSender(EmailConfiguration emailConfig, ILogService logService) { _emailConfig = emailConfig; this.logService = logService; } private string Getmessage(string code) { return code switch { "account-created" => "seja bem vindo {0} <br/><br/> sua conta foi criada com sucesso em nosso sistema.<Br/>" + "Por favor, ative sua conta através do link: {1}<br/><br/><b>Supply Compliance</b>", "notification-account-created" => "olá admin, <br/> tem um novo cadastro na plataforma. <Br/>" + "<b>Nome: </b>{0},<br/><b>E-mail: </b>{1},<br/><b>CNPJ: </b>{2},<br/><b>Empresa: </b>{3}. Verifique o cadastro na plataforma para ativa-lo.< Br/><br/><b>Supply Compliance</b>", "forgot-password" => "olá {0} <br/><br/> seu código para mudar a senha é: <b>{1}</ b><br/><br/><b>supply compliance</b>", "password-changed" => "olá {0} <br/><br/> sua senha foi modificada com sucesso.<Br/><br/><b> Supply Compliance </b> ", _ => "", }; } public void SendEmail(EmailViewModel message, IEnumerable<string> parameters) { var emailMessage = CreateEmailMessagAccount(message, parameters); Send(emailMessage); } public async Task SendEmailAsync(EmailViewModel message, IEnumerable<string> parameters) { var mailMessage = CreateEmailMessagAccount(message, parameters); await SendAsync(mailMessage); } private MimeMessage CreateEmailMessagAccount(EmailViewModel message, IEnumerable<string> parameters) { var emailMessage = CreateEmailMessage(message); string bodyFormatted = string.Format(GetMessage(message.Code), parameters.Select(x => x.ToString()).ToArray()); var bodyBuilder = new BodyBuilder { HtmlBody = bodyFormatted }; emailMessage.Body = bodyBuilder.ToMessageBody(); return emailMessage; } public void SendEmailProvedor(EmailViewModel message, string template, IDictionary<string, string> parameters, IDictionary<string, string> imgPaths) { var emailMessage = CreateEmailMessageProvedor(message, template, parameters, imgPaths); Send(emailMessage); } private MimeMessage CreateEmailMessageProvedor(EmailViewModel message, string template, IDictionary<string, string> parameters, IDictionary<string, string> imgPaths) { var emailMessage = CreateEmailMessage(message); string htmlTemplate = File.ReadAllText(template); foreach (var itemParameter in parameters) { htmlTemplate = htmlTemplate.Replace(itemParameter.Key, itemParameter.Value); } var bodyBuilder = new BodyBuilder(); // Add pictures to embedded resources and replace links to pictures in the message foreach (var itemImgpath in imgPaths) { var image = bodyBuilder.LinkedResources.Add(itemImgpath.Value); image.ContentId = MimeUtils.GenerateMessageId(); htmlTemplate = htmlTemplate.Replace(itemImgpath.Key, string.Format("cid:{0}", image.ContentId)); } bodyBuilder.HtmlBody = htmlTemplate; emailMessage.Body = bodyBuilder.ToMessageBody(); return emailMessage; } private MimeMessage CreateEmailMessage(EmailViewModel message) { var emailMessage = new MimeMessage(); emailMessage.From.Add(new MailboxAddress("Supply", _emailConfig.From)); emailMessage.To.AddRange(message.Recipients); emailMessage.Subject = message.Subject; return emailMessage; } private void Send(MimeMessage mailMessage) { using var client = new SmtpClient(); try { ////client.Connect(_emailConfig.SmtpServer, _emailConfig.Port, true); ////client.AuthenticationMechanisms.Remove("XOAUTH2"); ////client.Authenticate(_emailConfig.UserName, _emailConfig.Password); client.Connect(_emailConfig.SmtpServer, _emailConfig.Port, SecureSocketOptions.Auto); //client.Connect(_emailConfig.SmtpServer, _emailConfig.Port, SecureSocketOptions.StartTls); //client.Connect(_emailConfig.SmtpServer, _emailConfig.Port, useSsl: true); client.Authenticate(_emailConfig.UserName, _emailConfig.Password); client.Send(mailMessage); } catch (Exception ex) { var log = $"Error to send email to {mailMessage.To} /n" + $"Exceção: {ex} /n" + $"_emailConfig: {_emailConfig} /n" + $"emailEnviado: {mailMessage}"; logService.SaveLog(LogType.Error, log, null); throw new ApiException($"Error ao enviar email para {mailMessage.To}"); } finally { client.Disconnect(true); client.Dispose(); } } private async Task SendAsync(MimeMessage mailMessage) { using var client = new SmtpClient(); try { await client.ConnectAsync(_emailConfig.SmtpServer, _emailConfig.Port, true); client.AuthenticationMechanisms.Remove("XOAUTH2"); await client.AuthenticateAsync(_emailConfig.UserName, _emailConfig.Password); await client.SendAsync(mailMessage); } catch (Exception ex) { logService.SaveLog(LogType.Error, $"Error to send async email to {mailMessage.To}: " + ex.Message, null); } finally { await client.DisconnectAsync(true); client.Dispose(); } } } } ################ private void Send(MimeMessage mailMessage) { using var client = new SmtpClient(); try { ////client.Connect(_emailConfig.SmtpServer, _emailConfig.Port, true); ////client.AuthenticationMechanisms.Remove("XOAUTH2"); ////client.Authenticate(_emailConfig.UserName, _emailConfig.Password); client.Connect(_emailConfig.SmtpServer, _emailConfig.Port, SecureSocketOptions.Auto); //client.Connect(_emailConfig.SmtpServer, _emailConfig.Port, SecureSocketOptions.StartTls); //client.Connect(_emailConfig.SmtpServer, _emailConfig.Port, useSsl: true); client.Authenticate(_emailConfig.UserName, _emailConfig.Password); client.Send(mailMessage); } catch (Exception ex) { var log = $"Error to send email to {mailMessage.To} /n" + $"Exceção: {ex} /n" + $"_emailConfig: {_emailConfig} /n" + $"emailEnviado: {mailMessage}"; logService.SaveLog(LogType.Error, log, null); throw new ApiException($"Error ao enviar email para {mailMessage.To}"); } finally { client.Disconnect(true); client.Dispose(); } }

Categoria TI e Programação
Subcategoria Programação
Qual é o alcance do projeto? Bug ou alteração pequena
Isso é um projeto ou uma posição de trabalho? Um projeto
Tenho, atualmente Eu tenho especificações
Disponibilidade requerida Conforme necessário
Integrações de API Outros (Outras APIs)
Funções necessárias Desenvolvedor

Prazo de Entrega: 28 de Fevereiro de 2022

Habilidades necessárias

Outro projetos publicados por G.