/// <summary>
        /// Parses header field from the specified value.
        /// </summary>
        /// <param name="value">Header field value. Header field name must be included. For example: 'Content-Type: text/plain'.</param>
        /// <returns>Returns parsed header field.</returns>
        /// <exception cref="ArgumentNullException">Is raised when <b>value</b> is null reference.</exception>
        /// <exception cref="ParseException">Is raised when header field parsing errors.</exception>
        public static Mail_h_MailboxList Parse(string value)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            string[] name_value = value.Split(new char[] { ':' }, 2);
            if (name_value.Length != 2)
            {
                throw new ParseException("Invalid header field value '" + value + "'.");
            }

            /* RFC 5322 3.4.
             *  mailbox       =   name-addr / addr-spec
             *  name-addr     =   [display-name] angle-addr
             *  angle-addr    =   [CFWS] "<" addr-spec ">" [CFWS] / obs-angle-addr
             *  display-name  =   phrase
             *  mailbox-list  =   (mailbox *("," mailbox)) / obs-mbox-list
             */

            Mail_h_MailboxList retVal = new Mail_h_MailboxList(name_value[0], Mail_t_MailboxList.Parse(name_value[1].Trim()));

            retVal.m_ParseValue = value;
            retVal.m_pAddresses.AcceptChanges();

            return(retVal);
        }
        /// <summary>
        /// Parses <b>mailbox</b> from specified string value.
        /// </summary>
        /// <param name="value">The <b>mailbox</b> string value.</param>
        /// <returns>Returns parse mailbox.</returns>
        /// <exception cref="ArgumentNullException">Is raised when <b>value</b> is null reference.</exception>
        /// <exception cref="ParseException">Is raised when <b>value</b> is not valid <b>mailbox</b> value.</exception>
        public static Mail_t_Mailbox Parse(string value)
        {
            if(value == null){
                throw new ArgumentNullException("value");
            }

            MIME_Reader        r      = new MIME_Reader(value);
            Mail_t_MailboxList retVal = new Mail_t_MailboxList();
            while(true){
                string word = r.QuotedReadToDelimiter(new char[]{',','<'});
                // We processed all data.
                if(string.IsNullOrEmpty(word) && r.Available == 0){
                    throw new ParseException("Not valid 'mailbox' value '" + value + "'.");
                }
                // name-addr
                else if(r.Peek(true) == '<'){
                    return new Mail_t_Mailbox(word != null ? MIME_Encoding_EncodedWord.DecodeS(TextUtils.UnQuoteString(word.Trim())) : null,r.ReadParenthesized());
                }
                // addr-spec
                else{
                    return new Mail_t_Mailbox(null,word);
                }
            }

            throw new ParseException("Not valid 'mailbox' value '" + value + "'.");
        }
        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="filedName">Header field name. For example: "To".</param>
        /// <param name="values">Addresses collection.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>filedName</b> or <b>values</b> is null reference.</exception>
        /// <exception cref="ArgumentException">Is raised when any of the arguments has invalid value.</exception>
        public Mail_h_MailboxList(string filedName, Mail_t_MailboxList values)
        {
            if (filedName == null)
            {
                throw new ArgumentNullException("filedName");
            }
            if (filedName == string.Empty)
            {
                throw new ArgumentException("Argument 'filedName' value must be specified.");
            }
            if (values == null)
            {
                throw new ArgumentNullException("values");
            }

            m_Name       = filedName;
            m_pAddresses = values;
        }