140 lines
5.4 KiB
C#

using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Options;
using SendGrid;
using SendGrid.Helpers.Mail;
namespace gehGassi.Web.Services
{
/// <summary>
/// Schnittstellenbeschreibung für einen Service der den Email-Versand ermöglicht
/// </summary>
public interface IEmailSender
{
/// <summary>
/// Sendet eine Email an eine Adresse
/// </summary>
/// <param name="email">E-Mail Adresse</param>
/// <param name="subject">Betreff</param>
/// <param name="message">Nachricht</param>
/// <returns>Task</returns>
Task SendEmailAsync(string email, string subject, string message);
/// <summary>
/// Sendet eine Email an eine Adresse
/// </summary>
/// <param name="email">E-Mail Adresse</param>
/// <param name="subject">Betreff</param>
/// <param name="message">Nachricht</param>
/// <param name="attachement">Attachement-File</param>
/// <param name="attachementName">Dateiname des Attachement</param>
/// <returns>Task</returns>
Task SendEmailAsync(string email, string subject, string message, byte[] attachement, string attachementName);
/// <summary>
/// Sendet eine Email an eine Adresse
/// </summary>
/// <param name="from">Absender-Name</param>
/// <param name="fromEmail">Absender Email</param>
/// <param name="to">Ziel-Name</param>
/// <param name="toEmail">Ziel Email</param>
/// <param name="subject">Betreff</param>
/// <param name="message">Nachricht</param>
/// <returns>Task</returns>
Task SendEmailAsync(string from, string fromEmail, string to, string toEmail, string subject, string message);
}
/// <summary>
/// Service der den Email-Versand ermöglicht
/// </summary>
public class EmailSender : IEmailSender
{
private readonly IOptions<Helper.EmailSenderOptions> _emailOptions;
/// <summary>
/// ERstellt eine Instanz
/// </summary>
/// <param name="emailOptions">Einstellungen für den Email-Versand</param>
public EmailSender(IOptions<Helper.EmailSenderOptions> emailOptions)
{
_emailOptions = emailOptions;
}
/// <summary>
/// Sendet eine Email an eine Adresse
/// </summary>
/// <param name="email">E-Mail Adresse</param>
/// <param name="subject">Betreff</param>
/// <param name="message">Nachricht</param>
/// <returns>Task</returns>
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);
}
/// <summary>
/// Sendet eine Email an eine Adresse
/// </summary>
/// <param name="email">E-Mail Adresse</param>
/// <param name="subject">Betreff</param>
/// <param name="message">Nachricht</param>
/// <param name="attachement">Attachement-File</param>
/// <param name="attachementName">Dateiname des Attachement</param>
/// <returns>Task</returns>
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);
}
/// <summary>
/// Sendet eine Email an eine Adresse
/// </summary>
/// <param name="from">Absender-Name</param>
/// <param name="fromEmail">Absender Email</param>
/// <param name="to">Ziel-Name</param>
/// <param name="toEmail">Ziel Email</param>
/// <param name="subject">Betreff</param>
/// <param name="message">Nachricht</param>
/// <returns>Task</returns>
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);
}
}
}