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);
}
}
}