public Task <bool> SendAsync(SenderParams args) { var currentColor = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine(JsonConvert.SerializeObject(args, Formatting.Indented)); Console.ForegroundColor = currentColor; return(Task.FromResult(true)); }
public async Task <SentEmailInfo> TrySendEmailAsync(EmailMessageParams args) { EmailTemplate email; var templateInfo = await GetTemplateAsync(args); if (templateInfo.ApplicationName == null) { throw new InvalidOperationException($"The application ID `{args.ApplicationId}` does not match any records in the database"); } if (templateInfo.Template == null) { if (args.TemplateId.HasValue) { throw new InvalidOperationException($"Could not find a template matching {args.TemplateId}"); } else { throw new InvalidOperationException("No subject and body were supplied, and no template ID was provided"); } } // note that Data is a dictionary; if it has no values, we can assume that it's empty // and thus skip the transformation if (args.Data?.Count > 0) { email = await Transformer.TransformTemplateAsync(templateInfo.Template, args.Data, args.GetCulture()); } else { email = templateInfo.Template; } var senderParams = new SenderParams { To = args.To, CC = args.CC, Bcc = args.Bcc, Subject = email.Subject, Body = email.Body, SenderName = templateInfo.SenderName, SenderAddress = templateInfo.SenderAddress }; // we can pre-fill these log fields var log = new SentEmailInfo { ApplicationName = templateInfo.ApplicationName, TemplateName = templateInfo.Template.Name, TemplateId = args.TemplateId, Subject = senderParams.Subject, LogLevel = args.LogLevel, Recipients = senderParams.GetRecipients() }; var success = false; while (!success && templateInfo.TransportQueue.Any()) { var transportInfo = templateInfo.TransportQueue.Dequeue(); var transport = _transportFactory.CreateTransport(transportInfo); if (await transport.SendAsync(senderParams)) { // we can fill this information in now that we know it log.ProcessedUtc = DateTime.UtcNow; log.Transport = transportInfo; success = true; } } if (!success) { throw new Exception("Could not send email with any of the configured transports"); } return(log); }