140 lines
5.4 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|