public static MailQueueItem CreateItemForAccount(MailBox account, MailItemManager manager)
 {
     var item = new MailQueueItem(account);
     item.GetStoredMessagesUidlMd5 += manager.GetStoredMessagesUIDL_MD5;
     item.OnRetrieveNewMessage += manager.OnRetrieveNewMessage;
     item.OnUpdateUidl += manager.OnUpdateUidl;
     item.OnAuthSucceed += manager.OnAuthSucceed;
     item.OnAuthFailed += manager.OnAuthFailed;
     item.OnDone += manager.OnDone;
     item.OnTimeCheckedUpdate += manager.OnCheckedTimeUpdate;
     item.OnGetOrCreateTags += manager.OnGetOrCreateTags;
     item.OnUpdateMessagesTags += manager.OnUpdateMessagesTags;
     return item;
 }
Example #2
0
        public static MailQueueItem CreateItemForAccount(MailBox account, MailItemManager manager)
        {
            var item = new MailQueueItem(account);

            item.GetStoredMessagesUidlMd5 += manager.GetStoredMessagesUIDL_MD5;
            item.OnRetrieveNewMessage     += manager.OnRetrieveNewMessage;
            item.OnUpdateUidl             += manager.OnUpdateUidl;
            item.OnAuthSucceed            += manager.OnAuthSucceed;
            item.OnAuthFailed             += manager.OnAuthFailed;
            item.OnDone += manager.OnDone;
            item.OnTimeCheckedUpdate  += manager.OnCheckedTimeUpdate;
            item.OnGetOrCreateTags    += manager.OnGetOrCreateTags;
            item.OnUpdateMessagesTags += manager.OnUpdateMessagesTags;
            return(item);
        }
Example #3
0
        private async Task <Mail> ProduceMailAsync(MailQueueItem queueItem, IServiceProvider serviceProvider, CancellationToken cancellationToken)
        {
            IMailTypeDefinition mailTypeDefinition;

            try
            {
                mailTypeDefinition = _mailTypeCatalog.GetDefinition(queueItem.MailType, throwIfNotFound: true) !;
            }
            catch (ArgumentException ex)
            {
                return(new Mail(queueItem, null, new MailTypeNotSupportedException(ex)));
            }

            MailModel mailModel;

            try
            {
                mailModel = mailTypeDefinition.DeserializeModel(queueItem.MailModel);
            }
            catch (Exception ex)
            {
                return(new Mail(queueItem, null, new MailModelSerializationException(ex)));
            }

            var mailMessageProducer = mailTypeDefinition.CreateMailMessageProducer(serviceProvider);

            MimeMessage message;

            try
            {
                message = await mailMessageProducer.ProduceAsync(mailModel, cancellationToken).ConfigureAwait(false);
            }
            catch (Exception ex) when(!(ex is OperationCanceledException))
            {
                return(new Mail(queueItem, null, ex));
            }

            return(new Mail(queueItem, message, null));
        }
Example #4
0
 public Mail(MailQueueItem queueItem, MimeMessage?message, Exception?error)
 {
     QueueItem = queueItem;
     Message   = message;
     Error     = error;
 }
Example #5
0
        private async Task RegisterItemFailureAsync(WritableDataContext dbContext, MailQueueItem queueItem, bool canRetry, CancellationToken cancellationToken)
        {
            queueItem.DueDate = canRetry ? GetRetryDueDate(queueItem.CreationDate, queueItem.DueDate !.Value) : (DateTime?)null;

            await dbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
        }