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); } }
/// <summary> /// registra una nueva cuenta de correo /// </summary> public void Register(string pAlias, string pMailAddress, string pPassword) { try { MailAccount mMailAccount; //Se obtiene la existencia de la cuenta que corresponde a los argumentos mMailAccount = this.iMailAccountRepository.Single(MailAccountSelector.ByMailAddress(pMailAddress)); if (mMailAccount != null) { throw new ExistentAccountException(); } //se encripta la contraseña string mPassword = this.iEncryptor.Encrypt(pPassword); //se crea la direccion de correo MailAddress mMailAddress = this.iMailAddressRepository.Single(MailAddressSelector.ByMailAddress(pMailAddress)) ?? new MailAddress { Value = pMailAddress }; //se crea la cuenta de correo mMailAccount = new MailAccount { Alias = pAlias, MailAddress = mMailAddress, Password = mPassword }; //se agrega la nueva cuenta al repositorio this.iMailAccountRepository.Create(mMailAccount); MCDAL.Instance.Save(); } catch (Exception bException) { throw new RegisterException(Resources.Exceptions.RegisterException, bException); } }
/// <summary> /// obtiene la cuenta correspondiente al correo y a la contraseña /// </summary> public MailAccount LoginByMailAddress(string pMailAddress, string pPassword) { //Se obtiene la existencia de la cuenta que corresponde a los argumentos MailAccount mMailAccount = this.iMailAccountRepository.Single(MailAccountSelector.ByMailAddress(pMailAddress)); if (mMailAccount == null) { throw new ExistentAccountException(); } if (this.iEncryptor.Decrypt(mMailAccount.Password) != pPassword) { throw new UnknownAccountException(); } if (mMailAccount.Deleted) { throw new AccountDeletedException(); } return(mMailAccount); }
public void Execute(int pMailAccountId, string pProtocolName, IEnumerable <string> pToMailAddresses, string pSubject, string pBody) { try { //se obtiene la cuenta del usuario activo this.iMailAccount = this.iMailAccountRepository.Single(MailAccountSelector.ById(pMailAccountId)); //se crea el mensaje this.iMailMessage = new Shared.MailMessage() { Subject = pSubject, To = pToMailAddresses.Select(bMailAddress => new Shared.MailAddress() { Value = bMailAddress }).ToList(), Body = pBody }; //se obtienen los datos del protocolo this.iProtocol = this.iMailServiceRepository .Single(MailServiceSelector.ByName(this.iMailAccount.GetMailServiceHost())) .Protocols.Single(bProtocol => bProtocol.Name.ToLower() == pProtocolName); iMailMessage.From = iMailAccount.MailAddress; //guardar el mensaje en el repositorio iMailAccount.MailAddress.FromMessages.Add(iMailMessage); iMailMessage.To = this.ResolveDbMailAddresses(iMailMessage.To).ToList(); MCDAL.Instance.Save(); this.Send(iMailAccount.MailAddress.Value, this.iEncryptor.Decrypt(iMailAccount.Password), iMailMessage); } catch (Exception bException) { throw new FailOnSend(Resources.Exceptions.MailService_Send_FailOnSend, bException); } }
public void Execute(int pMailAccountId, string pProtocolName, int pRetrieveWindowSize) { try { //se obtiene la cuenta del usuario activo this.iMailAccount = this.iMailAccountRepository.Single(MailAccountSelector.ById(pMailAccountId)); this.iRetrieveWindowSize = pRetrieveWindowSize; //se obtienen los datos del protocolo this.iProtocol = this.iMailServiceRepository .Single(MailServiceSelector.ByName(this.iMailAccount.GetMailServiceHost())) .Protocols.Single(bProtocol => bProtocol.Name.ToLower() == pProtocolName); //se obtiene la cantidad de mensajes como base para obtener los siguientes int mLastMessageId = this.iMailAccount.MailAddress.FromMessages.Any() && this.iMailAccount.MailAddress.ToMessages.Any() ? this.iMailAccount.MailAddress.FromMessages.Union(this.iMailAccount.MailAddress.ToMessages).Count() : 0; //se obtienen los correos IEnumerable <MailMessage> mMailMessages = this.Retrieve(this.iMailAccount.GetMailServiceHost(), this.iMailAccount.MailAddress.Value, this.iEncryptor.Decrypt(this.iMailAccount.Password), mLastMessageId, this.iRetrieveWindowSize) .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(this.iMailAccount.MailAddress.Value)) .Where(bMessage => !this.iMailAccount.MailAddress.FromMessages.Any(bSendedMessage => bSendedMessage.ExternalId == bMessage.ExternalId)); //se agrega cada mensaje a la bbdd foreach (MailMessage bMailMessage in mFromListMessage) { bMailMessage.From = this.iMailAccount.MailAddress; bMailMessage.To = this.ResolveDbMailAddresses(bMailMessage.To).ToList(); this.iMailAccount.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(this.iMailAccount.MailAddress.Value)) .Where(bMessage => !this.iMailAccount.MailAddress.ToMessages.Any(bSendedMessage => bSendedMessage.ExternalId == bMessage.ExternalId)); //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(); this.iMailAccount.MailAddress.ToMessages.Add(bMailMessage); MCDAL.Instance.Save(); } } catch { } }