diff --git a/src/Serilog.Sinks.Email/Sinks/Email/EmailSinkOptions.cs b/src/Serilog.Sinks.Email/Sinks/Email/EmailSinkOptions.cs
index ecef8a3..c91bc85 100644
--- a/src/Serilog.Sinks.Email/Sinks/Email/EmailSinkOptions.cs
+++ b/src/Serilog.Sinks.Email/Sinks/Email/EmailSinkOptions.cs
@@ -11,9 +11,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
using System.Net;
using MailKit.Security;
using Serilog.Formatting;
@@ -63,7 +60,7 @@ public EmailSinkOptions()
public int Port { get; set; } = DefaultPort;
///
- /// Gets or sets the credentials used for authentication.
+ /// Gets or sets the credentials used for authentication. See also for OAuth2 credentials.
///
public ICredentialsByHost? Credentials { get; set; }
@@ -97,4 +94,11 @@ public EmailSinkOptions()
/// Provides a method that validates server certificates.
///
public System.Net.Security.RemoteCertificateValidationCallback? ServerCertificateValidationCallback { get; set; }
+
+ ///
+ /// A for performing OAuth2 authentication against services such as
+ /// Microsoft 365. See these instructions
+ /// for how to create this object.
+ ///
+ public SaslMechanism? SaslMechanism { get; set; }
}
diff --git a/src/Serilog.Sinks.Email/Sinks/Email/MailKitEmailTransport.cs b/src/Serilog.Sinks.Email/Sinks/Email/MailKitEmailTransport.cs
index b625fce..4094b9f 100644
--- a/src/Serilog.Sinks.Email/Sinks/Email/MailKitEmailTransport.cs
+++ b/src/Serilog.Sinks.Email/Sinks/Email/MailKitEmailTransport.cs
@@ -32,12 +32,12 @@ public async Task SendMailAsync(EmailMessage emailMessage)
? new BodyBuilder { HtmlBody = emailMessage.Body }.ToMessageBody()
: new BodyBuilder { TextBody = emailMessage.Body }.ToMessageBody();
- using var smtpClient = OpenConnectedSmtpClient();
+ using var smtpClient = await OpenConnectedSmtpClientAsync();
await smtpClient.SendAsync(mimeMessage);
await smtpClient.DisconnectAsync(quit: true);
}
- SmtpClient OpenConnectedSmtpClient()
+ async Task OpenConnectedSmtpClientAsync()
{
var smtpClient = new SmtpClient();
@@ -48,15 +48,20 @@ SmtpClient OpenConnectedSmtpClient()
smtpClient.ServerCertificateValidationCallback += options.ServerCertificateValidationCallback;
}
- smtpClient.Connect(options.Host, options.Port, options.ConnectionSecurity);
+ await smtpClient.ConnectAsync(options.Host, options.Port, options.ConnectionSecurity);
- if (options.Credentials != null)
+ if (options.SaslMechanism != null)
{
- smtpClient.Authenticate(
+ await smtpClient.AuthenticateAsync(options.SaslMechanism);
+ }
+ else if (options.Credentials != null)
+ {
+ await smtpClient.AuthenticateAsync(
Encoding.UTF8,
options.Credentials.GetCredential(
options.Host, options.Port, "smtp"));
}
+
return smtpClient;
}