/// <inheritdoc />
        public override Task <SmtpResponse> SaveAsync(ISessionContext context, IMessageTransaction transaction, CancellationToken cancellationToken)
        {
            var textMessage = (ITextMessage)transaction.Message;

            var message = MimeMessage.Load(textMessage.Content);

            foreach (var sender in message.From)
            {
                foreach (var recipient in message.To)
                {
                    if (!(sender is MailboxAddress senderEmail) || !(recipient is MailboxAddress recipientEmail))
                    {
                        continue;
                    }

                    try
                    {
                        var acmeMessage = MimeKitConverter.ConvertToMessage(senderEmail, recipientEmail, message);
                        Log.Info($"INCOMING FROM {senderEmail.Address} TO {recipientEmail.Address} : {message.Subject}");

                        this.MessageReceived?.Invoke(this, acmeMessage);
                    }
                    catch (Exception e)
                    {
                        Log.Error(e);
                    }
                }
            }

            return(Task.FromResult(SmtpResponse.Ok));
        }
        private void ProcessMails(MimeMessage message)
        {
            message.ThrowIfNull(nameof(message));

            foreach (var sender in message.From)
            {
                foreach (var recipient in message.To)
                {
                    if (!(sender is MailboxAddress senderEmail) || !(recipient is MailboxAddress recipientEmail))
                    {
                        continue;
                    }

                    var acmeMessage = MimeKitConverter.ConvertToMessage(senderEmail, recipientEmail, message);
                    this.RaiseMessageReceived(acmeMessage);
                }
            }
        }