///<summary>Attempts to retrive the EmailAddress corresponding to the address in textFromAddress. ///Use fromAddressOverride when the controls textFromAddress.Text has not been loaded yet.</summary> public FromAddressMatchResult TryGetFromEmailAddress(out EmailAddress emailAddress,string fromAddressOverride="") { emailAddress=null; string fromAddressText=textFromAddress.Text; if(!string.IsNullOrEmpty(fromAddressOverride)) { fromAddressText=fromAddressOverride; } List<EmailAddress> listMatchingEmailAddresses=new List<EmailAddress>(); #region EmailAddressPreview.EmailAddressNum based matching. if(EmailAddressPreview!=null //User may have manually modified the From address, force old matching logic when EmailAddressPreview.EmailAddressNum can't be trusted. && EmailAddressPreview.GetFrom()==fromAddressText) { //Sending email address should be set before loading this control. This is the best approach to matching email account. listMatchingEmailAddresses=_listEmailAddresses.FindAll(x => x.EmailAddressNum==EmailAddressPreview.EmailAddressNum); } #endregion #region Text based matching else { foreach(EmailAddress emailAccount in _listEmailAddresses) { //Less reliable, but works in most email account setups. string senderAddress=emailAccount.SenderAddress.Trim().ToLower(); string emailUserName=emailAccount.EmailUsername.Trim().ToLower(); string fromAddress=fromAddressText.Trim().ToLower(); if(((senderAddress!="" && fromAddress.Contains(senderAddress)) || (emailUserName!="" && fromAddress.Contains(emailUserName)) || (fromAddress!="" && (emailUserName.Contains(fromAddress) || senderAddress.Contains(fromAddress)))) && (!listMatchingEmailAddresses.Contains(emailAccount))) { listMatchingEmailAddresses.Add(emailAccount);//Found an emailaddress that is probably right. } } } #endregion FromAddressMatchResult result; switch(listMatchingEmailAddresses.Count) { case 0: emailAddress=null; result=FromAddressMatchResult.Failed; break; case 1: emailAddress=listMatchingEmailAddresses[0]; result=FromAddressMatchResult.Success; break; default: emailAddress=listMatchingEmailAddresses[0]; result=FromAddressMatchResult.Multi; break; } return result; }
private void comboEmailFrom_SelectionChangeCommitted(object sender, EventArgs e) { EmailAddress emailAddressSelected = _listEmailAddresses[comboEmailFrom.SelectedIndex]; textFromAddress.Text = emailAddressSelected.GetFrom(); if (!_isComposing || !_isSigningEnabled) { return; } SetSig(EmailMessages.GetCertFromPrivateStore(emailAddressSelected.EmailUsername)); }