Wysyłka wiadomości e-mail to nieodłączna część logiki wielu aplikacji. W tym wpisie przedstawię Ci jak można ją zaimplementować używając biblioteki open source – FluentEmail. Możesz to zrobić w mniej niż 10 min! Brzmi obiecująco?
No dobrze, zanim przejdziemy do przykładów kodu pozwól, że przedstawię zalety tej biblioteki. Z jakiegoś powodu ją lubię, prawda? 😀 Oto 6 cech, za które ma u mnie wielki plus:
- Prosta konfiguracja: FluentEmail zapewnia łatwą i zrozumiałą konfigurację zarówno dla prostych, jak i zaawansowanych scenariuszy wysyłki e-maili.
- Przyjazny dla programistów interfejs: Biblioteka oferuje interfejs oparty na wzorcu Fluent Interface, który umożliwia intuicyjne tworzenie skomplikowanych wiadomości e-mail.
- Wsparcie dla różnych dostawców: FluentEmail obsługuje wiele popularnych dostawców e-mailowych, takich jak SMTP, SendGrid, Mailgun itp.
- Możliwość tworzeni szablonów wiadomości: Biblioteka umożliwia tworzenie szablonów wiadomości, co ułatwia dostosowanie treści e-maila do indywidualnych potrzeb.
- Obsługa załączników: FluentEmail umożliwia dołączanie plików do wiadomości e-mail, co jest przydatne przy wysyłaniu dokumentów, obrazów lub innych materiałów.
- Śledzenie statusu dostarczenia: Biblioteka oferuje funkcje śledzenia wiadomości e-mail, umożliwiając sprawdzenie, czy wiadomość została dostarczona do odbiorcy.
Darmowa biblioteka, z dobrą dokumentacją, działającym kodem i przejrzystym sposobem użycia.
Przyznaj – czego chcieć więcej?
Instalacja
Nic bardziej prostego. Bibliotekę możesz zainstalować używając menadżera pakietów NuGet lub z poziomu .NET CLI:
dotnet add package FluentEmail.Core
Po za tym pakietem należy zainstalować jeden dodatkowy, odpowiedzialny za to jaką drogą chcemy wysyłać maile. Podstawowym sposobem jest serwer SMTP. Jeżeli wybierasz tę drogę wysyłki, należy doinstalować pakiet Smtp:
dotnet add package FluentEmail.Smtp
Biblioteka wspiera szereg innych mail providerów:
- FluentEmail.Mailgun – wysyłka poprzez MailGun’s REST API.
- FluentEmail.SendGrid – wysyłka poprzez SendGrid API.
- FluentEmail.Mailtrap – wysyłka z użyciem Mailtrap
- FluentEmail.MailKit – wysyłka z użyciem biblioteki MailKit.
Konfiguracja
Po instalacji odpowiednich pakietów możemy przejść do właściwej konfiguracji. Biblioteka oferuje nam specjalne helpery, które znacząco upraszczają ten proces. Podstawowa konfiguracja opiera się na wywołaniu helperów w Startup.cs :
public void ConfigureServices(IServiceCollection services)
{
services
.AddFluentEmail("fromemail@test.test")
.AddRazorRenderer()
.AddSmtpSender("localhost", 25);
}
Proste? Pewnie, że tak! Idziemy dalej.
Na potrzeby tego wspisu przyjmijmy, że logika do wysyłki e-maili będzie zaimplementowana w klasie EmailService.cs:
public class EmailService {
private IFluentEmail _fluentEmail;
public EmailService(IFluentEmail fluentEmail) {
_fluentEmail = fluentEmail;
}
public async Task Send() {
await _fluentEmail.To("hellO@gmail.com")
.Body("The body").SendAsync();
}
}
W powyższym przykładzie będziemy wysyłać tylko jedną wiadomość w danym kontekście. Dlatego w konstruktorze wstrzykujemy parametr typu IFluentEmail. Jeżeli chcielibyśmy wysyłać kilka wiadomości pod rząd, w jednym kontekście należałoby użyć IFluentEmailFactory.
Komponowanie i wysyłka wiadomości
Wiadomość tworzymy przy użyciu dedykowanych metod:
- .To(string emailAddress) – dodajemy odbiorców
- .SetFrom(string emailAddress) – zmieniamy adres nadawcy
- .CC/BCC(string emailAddress) – dodajemyu DW lub UDW
- .Subject(string subject) – ustawiamy temat wiadomości
- .Body(string body) – ustawiamy treść maila (bez szablonu). Jeżeli chcesz użyć HTML pamiętaj o ustawieniu isHtml na true
- .Attach(Attachment attachment) – dodaje załącznk
- UsingTemplate(string template, T model, bool isHtml = true) – ustawia szablon wiadomości
- SendAsync() – wysyła wiadomość poprzez ustawiony w konfiguracji provider
Szablony
Tutaj także nie ma magii. Wystarczy odpowiednio skonfigurować szablon, aby móc wypełnić go danymi i użyć w wiadomości:
Email.DefaultRenderer = new RazorRenderer();
var template = "Witaj @Model.Name! Gratulacje wykonanego zadania!";
var email = Email
.From("admin@programistaoptymista.pl")
.To("lukasz@gmail.com")
.Subject("Gratulacje!")
.UsingTemplate(template, new { Name = "Lukasz" });
Szczegółowe omówienie szablonów dostępne TUTAJ
Podsumowanie
FluentEmail to jedna z moich ulubionych bibliotek. Prosta w użyciu, bezproblemowa w obsłudze.
A co Ty o niej sądzisz? Korzystałeś/aś z niej w swoich projektach?
Nie? – Musisz spróbować!
Tak? – Podziel się opinią w komentarzu!