using System; using System.Threading.Tasks; using Microsoft.Extensions.Options; using SendGrid; using SendGrid.Helpers.Mail; namespace gehGassi.Web.Services { /// /// Schnittstellenbeschreibung für einen Service der den Email-Versand ermöglicht /// public interface IEmailSender { /// /// Sendet eine Email an eine Adresse /// /// E-Mail Adresse /// Betreff /// Nachricht /// Task Task SendEmailAsync(string email, string subject, string message); /// /// Sendet eine Email an eine Adresse /// /// E-Mail Adresse /// Betreff /// Nachricht /// Attachement-File /// Dateiname des Attachement /// Task Task SendEmailAsync(string email, string subject, string message, byte[] attachement, string attachementName); /// /// Sendet eine Email an eine Adresse /// /// Absender-Name /// Absender Email /// Ziel-Name /// Ziel Email /// Betreff /// Nachricht /// Task Task SendEmailAsync(string from, string fromEmail, string to, string toEmail, string subject, string message); } /// /// Service der den Email-Versand ermöglicht /// public class EmailSender : IEmailSender { private readonly IOptions _emailOptions; /// /// ERstellt eine Instanz /// /// Einstellungen für den Email-Versand public EmailSender(IOptions emailOptions) { _emailOptions = emailOptions; } /// /// Sendet eine Email an eine Adresse /// /// E-Mail Adresse /// Betreff /// Nachricht /// Task public async Task SendEmailAsync(string email, string subject, string message) { var client = new SendGridClient(_emailOptions.Value.SendGridKey); var msg = new SendGridMessage() { From = new EmailAddress(_emailOptions.Value.Email, _emailOptions.Value.Name), Subject = subject, PlainTextContent = message, HtmlContent = message }; msg.AddTo(new EmailAddress(email)); var response = await client.SendEmailAsync(msg); } /// /// Sendet eine Email an eine Adresse /// /// E-Mail Adresse /// Betreff /// Nachricht /// Attachement-File /// Dateiname des Attachement /// Task public async Task SendEmailAsync(string email, string subject, string message, byte[] attachement, string attachementName) { var client = new SendGridClient(_emailOptions.Value.SendGridKey); var msg = new SendGridMessage() { From = new EmailAddress(_emailOptions.Value.Email, _emailOptions.Value.Name), Subject = subject, PlainTextContent = message, HtmlContent = message }; if (attachement is { Length: > 0 } && !string.IsNullOrWhiteSpace(attachementName)) { var file = Convert.ToBase64String(attachement); msg.AddAttachment(attachementName, file); } msg.AddTo(new EmailAddress(email)); var response = await client.SendEmailAsync(msg).ConfigureAwait(false); } /// /// Sendet eine Email an eine Adresse /// /// Absender-Name /// Absender Email /// Ziel-Name /// Ziel Email /// Betreff /// Nachricht /// Task public async Task SendEmailAsync(string from, string fromEmail, string to, string toEmail, string subject, string message) { var client = new SendGridClient(_emailOptions.Value.SendGridKey); var msg = new SendGridMessage() { From = new EmailAddress(fromEmail, from), Subject = subject, PlainTextContent = message, HtmlContent = message }; msg.AddTo(new EmailAddress(toEmail, to)); var response = await client.SendEmailAsync(msg); } } }