public static Mime BuildMessageWithAttachments(string to, string from, string fileName, byte[] file)
        {
            var fromAddresses = new AddressList();

            fromAddresses.Parse(@from);
            var responseMime = new Mime();

            responseMime.MainEntity.From = fromAddresses;
            var toList = new AddressList {
                new MailboxAddress(to)
            };

            responseMime.MainEntity.To          = toList;
            responseMime.MainEntity.Subject     = "[Debug message]";
            responseMime.MainEntity.ContentType = MediaType_enum.Multipart_mixed;

            var testEntity = responseMime.MainEntity.ChildEntities.Add();

            testEntity.ContentType             = MediaType_enum.Text_plain;
            testEntity.ContentTransferEncoding = ContentTransferEncoding_enum.QuotedPrintable;
            testEntity.DataText = "";

            var attachEntity = responseMime.MainEntity.ChildEntities.Add();

            attachEntity.ContentType                 = MediaType_enum.Application_octet_stream;
            attachEntity.ContentTransferEncoding     = ContentTransferEncoding_enum.Base64;
            attachEntity.ContentDisposition          = ContentDisposition_enum.Attachment;
            attachEntity.ContentDisposition_FileName = Path.GetFileName(fileName);
            attachEntity.Data = file;

            return(responseMime);
        }
예제 #2
0
        private void ExcludeAddresses(MailAddressList recipients, string addrStr)
        {
            if (string.IsNullOrEmpty(addrStr))
            {
                return;
            }

            var addresses = AddressList.Parse(addrStr);

            foreach (PX.Common.Mail.Address address in addresses)
            {
                var group = address as Group;
                if (group != null)
                {
                    foreach (Mailbox mailbox in group.Members)
                    {
                        recipients.Remove(mailbox);
                    }
                }
                else
                {
                    recipients.Remove((Mailbox)address);
                }
            }
        }
예제 #3
0
        public static EmailAddressType[] ParceAddresses(string address)
        {
            if (String.IsNullOrEmpty(address))
            {
                return(null);
            }

            List <EmailAddressType> addresses = new List <EmailAddressType>();

            foreach (PX.Common.Mail.Address item in AddressList.Parse(address))
            {
                Group group = item as Group;
                if (group != null)
                {
                    foreach (Mailbox mailbox in group.Members)
                    {
                        addresses.Add(new EmailAddressType()
                        {
                            EmailAddress = mailbox.Address, Name = mailbox.DisplayName
                        });
                    }
                }
                else
                {
                    addresses.Add(new EmailAddressType()
                    {
                        EmailAddress = ((Mailbox)item).Address, Name = ((Mailbox)item).DisplayName
                    });
                }
            }
            return(addresses.ToArray());
        }
        protected override bool Process(Package package)
        {
            var account = package.Account;

            if (account.IncomingProcessing != true ||
                account.CreateActivity != true)
            {
                return(false);
            }
            PXGraph graph   = package.Graph;
            var     message = package.Message;

            if (!string.IsNullOrEmpty(message.Exception) || message.RefNoteID != null)
            {
                return(false);
            }

            List <String> addressesList = new List <String>( );

            addressesList.Add(package.Address);
            if (package.Message.IsIncome == false && package.Message.MailTo != null && package.Account.EmailAccountType == EmailAccountTypesAttribute.Exchange)
            {
                addressesList.InsertRange(0, AddressList.Parse(package.Message.MailTo).Mailboxes.Select(m => m.Address));
            }

            foreach (String address in addressesList)
            {
                PXSelect <Contact,
                          Where <Contact.eMail, Equal <Required <Contact.eMail> > > > .
                Clear(package.Graph);

                var contact = (Contact)PXSelect <Contact,
                                                 Where <Contact.eMail, Equal <Required <Contact.eMail> > > > .
                              SelectWindowed(package.Graph, 0, 1, address);

                if (contact != null && contact.ContactID != null)
                {
                    graph.EnsureCachePersistence(typeof(Contact));
                    graph.EnsureCachePersistence(typeof(BAccount));

                    message.ContactID = contact.ContactID;

                    PXSelect <BAccount,
                              Where <BAccount.bAccountID, Equal <Required <BAccount.bAccountID> > > > .
                    Clear(package.Graph);

                    BAccount baCcount = PXSelect <BAccount,
                                                  Where <BAccount.bAccountID, Equal <Required <BAccount.bAccountID> > > > .
                                        Select(package.Graph, contact.BAccountID);

                    if (baCcount != null)
                    {
                        message.BAccountID = baCcount.BAccountID;
                    }

                    return(true);
                }
            }
            return(false);
        }
        private IEnumerable <Mailbox> RemoveAddress(IEnumerable <Mailbox> source, string email)
        {
            email = email.With(_ => _.Trim());
            HybridDictionary addresses = new HybridDictionary();

            if (!string.IsNullOrEmpty(email))
            {
                foreach (PX.Common.Mail.Address address in AddressList.Parse(email))
                {
                    Group group = address as Group;
                    if (group != null)
                    {
                        foreach (Mailbox mailbox in @group.Members.Where(mailbox => !string.IsNullOrEmpty(mailbox.Address) && !addresses.Contains(mailbox.Address.ToLower())))
                        {
                            addresses.Add(mailbox.Address.ToLower(), mailbox);
                        }
                    }
                    else
                    {
                        Mailbox mailbox = (Mailbox)address;
                        if (!string.IsNullOrEmpty(mailbox.Address) && !addresses.Contains(mailbox.Address.ToLower()))
                        {
                            addresses.Add(mailbox.Address.ToLower(), mailbox);
                        }
                    }
                }
            }
            return(source.Where(item => addresses.Count == 0 || !addresses.Contains(item.Address.ToLower())));
        }
예제 #6
0
        public static Mime BuildMessageWithAttachments(string subject, string body, string[] to, string[] from, string[] files)
        {
            Assert.That(to, Is.Not.Null, "Список to пуст");
            Assert.That(to.Length, Is.GreaterThan(0), "Список to пуст");
            Assert.That(from, Is.Not.Null, "Список from пуст");
            Assert.That(from.Length, Is.GreaterThan(0), "Список from пуст");

            var responseMime = new Mime();

            responseMime.MainEntity.Subject     = subject;
            responseMime.MainEntity.ContentType = MediaType_enum.Multipart_mixed;

            if (!String.IsNullOrWhiteSpace(body))
            {
                var textEntity = responseMime.MainEntity.ChildEntities.Add();
                textEntity.ContentType             = MediaType_enum.Text_plain;
                textEntity.ContentTransferEncoding = ContentTransferEncoding_enum.QuotedPrintable;
                textEntity.DataText = body;
            }

            var fromAddresses = new AddressList();

            fromAddresses.Parse(from[0]);
            responseMime.MainEntity.From = fromAddresses;

            if (from.Length > 1)
            {
                responseMime.MainEntity.Sender = MailboxAddress.Parse(from[1]);
            }

            var toList = new AddressList();

            toList.Parse(to.Implode());
            responseMime.MainEntity.To = toList;

            if (files != null)
            {
                foreach (var fileName in files)
                {
                    var attachEntity = responseMime.MainEntity.ChildEntities.Add();
                    attachEntity.ContentType                 = MediaType_enum.Application_octet_stream;
                    attachEntity.ContentTransferEncoding     = ContentTransferEncoding_enum.Base64;
                    attachEntity.ContentDisposition          = ContentDisposition_enum.Attachment;
                    attachEntity.ContentDisposition_FileName = Path.GetFileName(fileName);

                    using (var fileStream = File.OpenRead(fileName)) {
                        var fileBytes = new byte[fileStream.Length];
                        fileStream.Read(fileBytes, 0, (int)(fileStream.Length));
                        attachEntity.Data = fileBytes;
                    }
                }
            }

            return(responseMime);
        }
예제 #7
0
 public static EmailAddressType ParceAddress(string address)
 {
     if (String.IsNullOrEmpty(address))
     {
         return(null);
     }
     foreach (PX.Common.Mail.Address item in AddressList.Parse(address))
     {
         return(new EmailAddressType()
         {
             EmailAddress = ((Mailbox)item).Address, Name = ((Mailbox)item).DisplayName
         });
     }
     return(null);
 }
예제 #8
0
 private static IEnumerable <Mailbox> ParseAddresses(string address)
 {
     address = address.With(_ => _.Trim());
     if (!string.IsNullOrEmpty(address))
     {
         foreach (PX.Common.Mail.Address item in AddressList.Parse(address))
         {
             var group = item as Group;
             if (group != null)
             {
                 foreach (Mailbox mailbox in group.Members)
                 {
                     yield return(mailbox);
                 }
             }
             else
             {
                 yield return((Mailbox)item);
             }
         }
     }
 }
        protected static string MergeAddressList(CRSMEmail email, string addressList, string sourceList)
        {
            if (string.IsNullOrEmpty(addressList))
            {
                return(sourceList);
            }

            AddressList result = new AddressList();
            var         index  = new HashSet <string>();

            foreach (Mailbox box in AddressList.Parse(addressList))
            {
                if (index.Contains(box.Address))
                {
                    continue;
                }
                if (email.MailTo != null && email.MailTo.Contains(box.Address))
                {
                    continue;
                }
                if (email.MailCc != null && email.MailCc.Contains(box.Address))
                {
                    continue;
                }
                if (email.MailBcc != null && email.MailBcc.Contains(box.Address))
                {
                    continue;
                }
                index.Add(box.Address);

                result.Add(box);
            }
            return(result.Count == 0
                ? sourceList
                : (string.IsNullOrEmpty(sourceList)
                    ? result.ToString()
                    : sourceList + "; " + result));
        }
예제 #10
0
        private IEnumerable <Mailbox> RemoveAddress(IEnumerable <Mailbox> source, string email)
        {
            email = email.With(_ => _.Trim());
            var addresses = new HybridDictionary();

            if (!string.IsNullOrEmpty(email))
            {
                foreach (PX.Common.Mail.Address address in AddressList.Parse(email))
                {
                    var group = address as Group;
                    if (group != null)
                    {
                        foreach (Mailbox mailbox in group.Members)
                        {
                            if (!string.IsNullOrEmpty(mailbox.Address))
                            {
                                addresses.Add(mailbox.Address.ToLower(), mailbox);
                            }
                        }
                    }
                    else
                    {
                        var mailbox = (Mailbox)address;
                        if (!string.IsNullOrEmpty(mailbox.Address))
                        {
                            addresses.Add(mailbox.Address.ToLower(), mailbox);
                        }
                    }
                }
            }
            foreach (Mailbox item in source)
            {
                if (addresses.Count == 0 || !addresses.Contains(item.Address.ToLower()))
                {
                    yield return(item);
                }
            }
        }