Changelog
Notable changes in each release.
All notable changes to ArturRios.Messaging are recorded in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
1.4.1 - 2026-10-29
Changed
- The package’s project URL is the documentation site’s new address,
https://docs.artur-rios.tech/dotnet-messaging, since the site moved from GitHub Pages.
1.4.0 - 2026-10-11
Added
MAILGUN_FROM(MailgunEmailService.FromVariable) sets the sender: an address, or a display name and an address (Example <[email protected]>). A value that is not exactly one address makesSendEmailAsyncreturn a failedProcessOutputnaming the variable, and nothing is sent.IEmailService.SendEmailAsync(to, subject, body, CancellationToken), matching the cancellation convention of the otherArturRiospackages. It has a default implementation — check the token, then call the three-argument overload — so existing implementations keep compiling.MailgunEmailServiceimplements it and passes the token to the HTTP request; an already-canceled token throwsOperationCanceledExceptionbefore anything is sent.- XML documentation of the exceptions
SendEmailAsynclets through:HttpRequestExceptionwhen Mailgun cannot be reached,TaskCanceledExceptionon anHttpClienttimeout,OperationCanceledExceptionon cancellation.
Changed
- Without
MAILGUN_FROM, mail is sent frompostmaster@{MAILGUN_DOMAIN}with no display name. It was sent asMailgun Sandbox <postmaster@{MAILGUN_DOMAIN}>, so production mail showed recipients the name “Mailgun Sandbox”. SetMAILGUN_FROMto choose the sender.
Security
MailgunEmailServiceno longer writes the recipient address to the log. Log lines carry a pseudonymous reference instead (the first twelve hex characters of the SHA-256 of the trimmed, lower-cased address), under the structured propertyRecipientRef, which replacesRecipient.
1.3.0 - 2026-08-24
Changed
MailgunEmailService.SendEmailAsyncreturns a failedProcessOutputnaming the missing variable, and sends nothing, whenMAILGUN_API_KEYorMAILGUN_DOMAINis unset or blank — instead of issuing an unauthenticated request against an empty domain.- Sends log the recipient at Information and the failure detail at Error, instead of a leftover “Testing Mailgun email service…” line and the whole response body at Information.
- When no
HttpClientis supplied,MailgunEmailServiceuses one client shared by the process instead of creating a new one per instance. - The
MailgunEmailServiceconstructor throwsArgumentNullExceptionfor a null logger. ArturRios.Outputupdated from 3.1.0 to 3.2.0.
Fixed
- The Mailgun credential is attached to each request instead of the client’s
DefaultRequestHeaders, which raced with concurrent sends and left the key on every later request a shared (AddHttpClient) client made. - Requests and responses are disposed after each send.
1.2.0 - 2026-08-19
Changed
ArturRios.Outputupdated from 2.0.1 to 3.1.0.
1.1.0 - 2026-07-30
Added
- The Mailgun API version is read from the
MAILGUN_API_VERSIONenvironment variable, falling back tov3when it is unset or blank. - Public constants
ApiKeyVariable,DomainVariable,ApiVersionVariableandDefaultMailgunApiVersiononMailgunEmailService. - XML documentation for every public member.
1.0.0 - 2026-06-21
Added
IEmailService, andMailgunEmailServiceto send plain text e-mails through the Mailgun HTTP API, configured through theMAILGUN_API_KEYandMAILGUN_DOMAINenvironment variables and returning aProcessOutputfromArturRios.Output.