///<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;
		}
示例#2
0
        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));
        }