From 20228e9a603fae5c2746060cafadbe6b7ed1a5b0 Mon Sep 17 00:00:00 2001 From: Joel Reinford Date: Sun, 1 Jan 2023 21:36:09 -0500 Subject: [PATCH] When using a pickup directory for MailKit, return the eml file GUID When an email is saved to a pickup directory using MailKitSender, it can be useful to return the GUID values that was used to save the eml file. This is similar to returning an identity or sequence value for a database insert operation. The SendResponse already has a MessageId property used by other senders that can be populated with the GUID. --- src/Senders/FluentEmail.MailKit/MailKitSender.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Senders/FluentEmail.MailKit/MailKitSender.cs b/src/Senders/FluentEmail.MailKit/MailKitSender.cs index 8a5d1413..805e9458 100644 --- a/src/Senders/FluentEmail.MailKit/MailKitSender.cs +++ b/src/Senders/FluentEmail.MailKit/MailKitSender.cs @@ -110,7 +110,8 @@ public async Task SendAsync(IFluentEmail email, CancellationToken? { if (_smtpClientOptions.UsePickupDirectory) { - await this.SaveToPickupDirectory(message, _smtpClientOptions.MailPickupDirectory); + var messageId = await this.SaveToPickupDirectory(message, _smtpClientOptions.MailPickupDirectory); + response.MessageId = messageId; return response; } @@ -156,20 +157,24 @@ await client.ConnectAsync( /// /// Message to save for pickup. /// Pickup directory. - private async Task SaveToPickupDirectory(MimeMessage message, string pickupDirectory) + private async Task SaveToPickupDirectory(MimeMessage message, string pickupDirectory) { // Note: this will require that you know where the specified pickup directory is. - var path = Path.Combine(pickupDirectory, Guid.NewGuid().ToString() + ".eml"); + var messageId = Guid.NewGuid().ToString(); + var path = Path.Combine(pickupDirectory, messageId + ".eml"); if (File.Exists(path)) - return; + return null; try { + //create the directory since it might not exist + Directory.CreateDirectory(pickupDirectory); + using (var stream = new FileStream(path, FileMode.CreateNew)) { await message.WriteToAsync(stream); - return; + return messageId; } } catch (IOException)