Beispiel #1
0
        public void HandleMessage(Stream content)
        {
            var memStream = new MemoryStream();

            content.CopyTo(memStream);
            memStream.Seek(0, SeekOrigin.Begin);
            var messageContent = MimeMessage.Load(memStream);

            memStream.Seek(0, SeekOrigin.Begin);

            var contextVariables = messageContent.Headers.ToDictionary(h => h.Field, h => h.Value);

            contextVariables.Add("CLIENT_IP", _context.IPEndPoint.Address.ToString());
            contextVariables.Add("CLIENT_HOST", _context.Hostname);

            var inboxPath = _inboxService.TokenizeString(_context.User, contextVariables);

            contextVariables.Add("INBOX", string.Join("/", inboxPath));

            var inbox = _inboxService.GetInboxByPath(inboxPath);

            var message = new Message()
            {
                Inbox                   = inbox,
                DateSent                = messageContent.Date.LocalDateTime,
                From                    = messageContent.From.ToString(),
                To                      = messageContent.To.ToString(),
                Cc                      = messageContent.Cc.ToString(),
                Bcc                     = messageContent.Bcc.ToString(),
                HasAttachments          = messageContent.Attachments.Any(),
                Source                  = new StreamReader(memStream).ReadToEnd(),
                Subject                 = messageContent.Subject,
                Summary                 = messageContent.TextBody,
                DateCreated             = DateTime.Now,
                CreatedByClientIP       = _context.IPEndPoint.Address.ToString(),
                CreatedByClientHostname = _context.Hostname
            };


            _dbContext.Messages.Add(message);
            _dbContext.SaveChanges();

#pragma warning disable CS4014
            SendNotification(message);
#pragma warning restore CS4014
        }