Exemplo n.º 1
0
        public void Send(int pMailAccountId, string pProtocolName, IEnumerable <string> pToMailAddresses, string pSubject, string pBody)
        {
            try
            {
                //se obtiene la cuenta del usuario activo
                MailAccount mMailAccount = this.iMailAccountRepository.Single(MailAccountSelector.ById(pMailAccountId));

                //se crea el mensaje
                MailMessage mMailMessage = new Shared.MailMessage()
                {
                    Subject = pSubject,
                    To      = pToMailAddresses.Select(bMailAddress => new Shared.MailAddress()
                    {
                        Value = bMailAddress
                    }).ToList(),
                    Body = pBody
                };

                mMailMessage.From = mMailAccount.MailAddress;
                //guardar el mensaje en el repositorio
                mMailAccount.MailAddress.FromMessages.Add(mMailMessage);
                mMailMessage.To       = this.ResolveDbMailAddresses(mMailMessage.To).ToList();
                mMailMessage.DateSent = DateTime.Now.ToShortDateString();
                MCDAL.Instance.Save();

                this.Send(pProtocolName, mMailAccount.GetMailServiceHost(), mMailAccount.MailAddress.Value, this.iEncryptor.Decrypt(mMailAccount.Password), mMailMessage);
            }
            catch (Exception bException)
            {
                throw new FailOnSend(Resources.Exceptions.MailService_Send_FailOnSend, bException);
            }
        }
Exemplo n.º 2
0
        public void Retrieve(int pMailAccountId, string pProtocolName, int pRetrieveWindowSize)
        {
            try
            {
                //se obtiene la cuenta del usuario activo
                MailAccount mMailAccount = this.iMailAccountRepository.Single(MailAccountSelector.ById(pMailAccountId));

                //se obtiene la cantidad de mensajes como base para obtener los siguientes
                int mLastMessageId =
                    mMailAccount.MailAddress.FromMessages.Any() &&
                    mMailAccount.MailAddress.ToMessages.Any()
                        ? mMailAccount.MailAddress.FromMessages.Union(mMailAccount.MailAddress.ToMessages).Count()
                        : 0;

                //se obtienen los correos
                IEnumerable <MailMessage> mMailMessages =
                    this.Retrieve(pProtocolName,
                                  mMailAccount.GetMailServiceHost(),
                                  mMailAccount.MailAddress.Value,
                                  this.iEncryptor.Decrypt(mMailAccount.Password),
                                  mLastMessageId,
                                  pRetrieveWindowSize)
                    .Select(bMailMessage => bMailMessage.ToMailClientMailMessage())
                    .ToList();

                //para los mensajes que tienen como remitente el correo del usuario
                // y que no existan en la bbdd
                IEnumerable <MailMessage> mFromListMessage =
                    mMailMessages
                    .Where(bMessage => bMessage.From.Value.Equals(mMailAccount.MailAddress.Value))
                    .Where(bMessage => !mMailAccount.MailAddress.FromMessages.Any(bSendedMessage => bSendedMessage.ExternalId == bMessage.ExternalId)).ToList();

                //se agrega cada mensaje a la bbdd
                foreach (MailMessage bMailMessage in mFromListMessage)
                {
                    bMailMessage.From = mMailAccount.MailAddress;
                    bMailMessage.To   = this.ResolveDbMailAddresses(bMailMessage.To).ToList();
                    mMailAccount.MailAddress.FromMessages.Add(bMailMessage);
                    MCDAL.Instance.Save();
                }

                //para los mensajes que no tienen como remitente el correo del usuario
                IEnumerable <MailMessage> mRecivedMailMessages =
                    mMailMessages
                    .Where(bMessage => !bMessage.From.Value.Equals(mMailAccount.MailAddress.Value))
                    .Where(bMessage => !mMailAccount.MailAddress.ToMessages.Any(bSendedMessage => bSendedMessage.ExternalId == bMessage.ExternalId)).ToList();


                //se agrega cada mensaje a la bbdd
                foreach (MailMessage bMailMessage in mRecivedMailMessages)
                {
                    bMailMessage.From = this.iMailAddressRepository.Single(MailAddressSelector.ByMailAddress(bMailMessage.From.Value)) ?? bMailMessage.From;
                    bMailMessage.To   = this.ResolveDbMailAddresses(bMailMessage.To).ToList();
                    mMailAccount.MailAddress.ToMessages.Add(bMailMessage);
                    MCDAL.Instance.Save();
                }
            }
            catch
            {
            }
        }