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); } }
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 { } }