Ejemplo n.º 1
0
        // GET: Mail
        public ActionResult Index(string id = null, string mailBox = null, string mailHost = "dragonmail.dragonspears.com")
        {
            var model = new MailViewModel();

            if (string.IsNullOrEmpty(mailBox))
            {
                return(View(model));
            }

            model.MailBox = mailBox;
            string queueName = DSMail.MessageQueue(string.Format("{0}@{1}", mailBox, mailHost));
            var    mailQuery = Client.CreateDocumentQuery <DSMail>(CollectionUri, new FeedOptions {
                MaxItemCount = -1
            })
                               .Where(m => m.Queue == queueName)
                               .OrderByDescending(m => m.SentDate);

            model.MailMessages = mailQuery.ToList();
            if (string.IsNullOrEmpty(id))
            {
                model.SelectedItem = model.MailMessages.FirstOrDefault();
            }
            else
            {
                model.SelectedItem = model.MailMessages.FirstOrDefault(m => m.id == id);
            }


            return(View(model));
        }
Ejemplo n.º 2
0
        public static ParsedMail MimeMessageToDSMail(this MimeMessage mimeMessage, string messageId)
        {
            var parsedMail = new ParsedMail();

            parsedMail.Mail        = new List <DSMail>();
            parsedMail.Attachments = new List <ParsedAttachment>();

            //find inline attachments
            var attachments = new List <MimePart>();

            if (mimeMessage.BodyParts != null)
            {
                attachments.AddRange(mimeMessage.BodyParts.OfType <MimePart>()
                                     .Where(p => !string.IsNullOrEmpty(p.FileName) &&
                                            (p.ContentDisposition == null || string.IsNullOrEmpty(p.ContentDisposition.Disposition) || p.ContentDisposition.Disposition == ContentDisposition.Inline))
                                     .ToList());
            }
            if (mimeMessage.Attachments != null)
            {
                attachments.AddRange(mimeMessage.Attachments.OfType <MimePart>());

                foreach (var attachment in mimeMessage.Attachments.OfType <MessagePart>())
                {
                    AddAttachment(parsedMail, attachment);
                }
            }

            foreach (var attachment in attachments)
            {
                AddAttachment(parsedMail, attachment);
            }

            foreach (var toAddress in mimeMessage.To)
            {
                var mail = new DSMail();
                parsedMail.Mail.Add(mail);

                if (mimeMessage.From != null && mimeMessage.From.Count > 0)
                {
                    var firstFrom = mimeMessage.From.First() as MailboxAddress;
                    mail.FromEmail = firstFrom.Address;
                    mail.FromName  = firstFrom.Name;
                }
                var toMailBox = toAddress as MailboxAddress;
                mail.ToName  = toMailBox.Name;
                mail.ToEmail = toMailBox.Address;

                mail.Subject     = mimeMessage.Subject;
                mail.HtmlBody    = mimeMessage.HtmlBody;
                mail.TextBody    = mimeMessage.TextBody;
                mail.Queue       = DSMail.MessageQueue(mail.ToEmail);
                mail.SentDate    = DateTime.Now;
                mail.MessageId   = messageId;
                mail.Attachments = parsedMail.Attachments.ToDictionary(a => a.Name, a => a.File.Length);
            }

            return(parsedMail);
        }
Ejemplo n.º 3
0
        public string GetRawMailText(DSMail source)
        {
            var task = GetRawMail(source);

            task.RunSynchronously();
            task.Wait();
            byte[]        rawMail = task.Result;
            ASCIIEncoding encoder = new ASCIIEncoding();
            string        rawText = encoder.GetString(rawMail, 0, rawMail.Length);

            return(rawText);
        }
Ejemplo n.º 4
0
        private List <DSMail> GetMail(string mailBox)
        {
            string queueName = DSMail.MessageQueue(string.Format("{0}@dragonmail.dragonspears.com", mailBox));

            var mail = Client.CreateDocumentQuery <DSMail>(CollectionUri, new FeedOptions {
                MaxItemCount = -1
            })
                       .Where(m => m.Queue == queueName)
                       .ToList();

            return(mail.Where(m => m.MessageStatus == 0)
                   .ToList());//message status 0 is unprocessed
        }
Ejemplo n.º 5
0
        public async Task <byte[]> GetRawMail(DSMail source)
        {
            var docUri = UriFactory.CreateDocumentUri(DTO.Constants.ConnectionSettings.DOCDB_DATABASE_NAME,
                                                      DTO.Constants.ConnectionSettings.DOCDB_COLLECTION_NAME, source.id);
            var response = await Client.ReadDocumentAsync(docUri);

            string attachmentLink = response.Resource.AttachmentsLink;
            var    attachment     = Client.CreateAttachmentQuery(attachmentLink)
                                    .Where(a => a.Id == source.MessageId)
                                    .AsEnumerable()
                                    .FirstOrDefault();

            if (attachment == null)
            {
                throw new ApplicationException("Not Found");
            }
            var mediaResponse = await Client.ReadMediaAsync(attachment.MediaLink);

            byte[] rawMail = new byte[mediaResponse.ContentLength];
            await mediaResponse.Media.ReadAsync(rawMail, 0, (int)mediaResponse.ContentLength);

            return(rawMail);
        }