public async Task <HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default) { try { var client = new MailjetClient(_mailjetConfiguration.PublicApiKey, _mailjetConfiguration.PrivateApiKey); var email = new TransactionalEmail { From = new SendContact(_emailConfiguration.SenderAddress, _emailConfiguration.SenderName), Subject = "Health Check", ReplyTo = new SendContact(_emailConfiguration.ReplyToAddress, _emailConfiguration.SenderName), CustomCampaign = _mailjetConfiguration.Campaign, To = new List <SendContact> { new SendContact("*****@*****.**") }, TextPart = "This e-mail is sent from a health check and should never reach anybody." }; await client.SendTransactionalEmailAsync(email, true); return(await Task.FromResult(HealthCheckResult.Healthy("Mailjet is healthy."))); } catch (Exception ex) { _logger.LogError(ex, $"Mailjet Healthcheck failed: {ex.Message}"); return(await Task.FromResult(HealthCheckResult.Unhealthy("Mailjet is not healthy."))); } }
public async Task SendEmail(TransactionalEmail template, string email, object data) { var message = new SendGridMessage(); var templateId = this.GetTemplateId(template); message.SetupNoReplyMessage(templateId, email, data); var result = await this.client.SendEmailAsync(message); }
private string GetTemplateId(TransactionalEmail email) { switch (email) { case TransactionalEmail.TeamInvite: return(Shared.Configuration.SendGridTemplates.SendInvite); default: throw new Exception("Invalid Email Template"); } }
/// <inheritdoc/> public async Task <string> SendTransactionalEmail(TransactionalEmail email, CancellationToken cancellationToken) { var request = new RestRequest(Method.POST); request.Resource = $"smtp/email"; request.AddHeader("accept", "application/json"); var json = ToJson(email); request.AddParameter("application/json", json, ParameterType.RequestBody); var response = await client.ExecuteAsync <string>(request, cancellationToken); if (!response.IsSuccessful) { throw exceptionFactory.CreateException(response); } return(response.Data); }
public async Task Send(string recipientAddress, string subject, string htmlBody, string textBody, params IEmailAttachment[] attachments) { if (string.IsNullOrWhiteSpace(recipientAddress)) { throw new ArgumentOutOfRangeException(nameof(recipientAddress)); } var client = new MailjetClient(_mailjetConfig.PublicApiKey, _mailjetConfig.PrivateApiKey); var email = new TransactionalEmail { From = new SendContact(_emailConfig.SenderAddress, _emailConfig.SenderName), Subject = subject, ReplyTo = new SendContact(_emailConfig.ReplyToAddress, _emailConfig.SenderName), CustomCampaign = _mailjetConfig.Campaign, To = new List <SendContact> { new SendContact(recipientAddress) }, TextPart = textBody, HTMLPart = htmlBody, Attachments = new List <Attachment>(), }; foreach (var attachment in attachments) { new FileExtensionContentTypeProvider().TryGetContentType(attachment.Filename, out var contentType); email.Attachments.Add(new Attachment(attachment.Filename, contentType ?? "application/octet-stream", Convert.ToBase64String(attachment.Bytes))); } try { await client.SendTransactionalEmailAsync(email); } catch (Exception ex) { throw new Exception($"Sending email via MailJet failed.{Environment.NewLine}: {ex.Message}", ex); } }
/// <summary> /// Sends a single transactional email using send API v3.1 /// </summary> public Task <TransactionalEmailResponse> SendTransactionalEmailAsync(TransactionalEmail transactionalEmail, bool isSandboxMode = false, bool advanceErrorHandling = true) { return(SendTransactionalEmailsAsync(new[] { transactionalEmail }, isSandboxMode, advanceErrorHandling)); }
public Message(string recipient, TransactionalEmail type, T data) : base(recipient, type) { this.Data = data; }