Пример #1
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="FieldText">Field text</param>
        public Field(string FieldText)
        {
            if (string.IsNullOrEmpty(FieldText))
            {
                throw new ArgumentNullException();
            }

            int Index = FieldText.IndexOf(':');

            if (Index != -1)
            {
                Name = FieldText.Substring(0, Index);
            }

            ++Index;
            FieldText = FieldText.Substring(Index, FieldText.Length - Index).Trim();
            string[] Splitter   = { ";" };
            string[] Attributes = FieldText.Split(Splitter, StringSplitOptions.RemoveEmptyEntries);
            foreach (string AttributeText in Attributes)
            {
                Code TempCode = CodeManager.Instance[Name];
                if (TempCode != null)
                {
                    string TempText = "";
                    TempCode.Decode(AttributeText, out TempText);
                    this.Attributes.Add(new Attribute(TempText));
                    CharacterSet = TempCode.CharacterSet;
                }
                else
                {
                    this.Attributes.Add(new Attribute(AttributeText));
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="Input">Body text</param>
        /// <param name="Header">Header of the message</param>
        public MIMEBody(string Input, MIMEHeader Header)
        {
            if (string.IsNullOrEmpty(Input))
            {
                throw new ArgumentNullException("Input can not be null");
            }
            MediaEnum ContentType;

            ContentType = GetMediaType(Header);
            if (MediaEnum.MEDIA_MULTIPART == ContentType)
            {
                string CurrentBoundry = GetBoundryMarker(Header);
                if (string.IsNullOrEmpty(CurrentBoundry))
                {
                    return;
                }
                CurrentBoundry = CurrentBoundry.Replace("\"", "");

                string BoundryStart = "--" + CurrentBoundry;
                string BoundryEnd   = BoundryStart + "--";

                int StartIndex = Input.IndexOf(BoundryStart, 0);
                if (StartIndex == -1)
                {
                    return;
                }
                int EndIndex = Input.IndexOf(BoundryEnd, 0);
                if (EndIndex == -1)
                {
                    EndIndex = Input.Length;
                }

                Content = Input.Substring(0, StartIndex);
                while (StartIndex < EndIndex)
                {
                    StartIndex += BoundryStart.Length + 2;
                    if (StartIndex >= EndIndex)
                    {
                        break;
                    }
                    int TempIndex = Input.IndexOf(BoundryStart, StartIndex);
                    if (TempIndex != -1)
                    {
                        Boundries.Add(new MIMEMessage(Input.Substring(StartIndex, TempIndex - StartIndex)));
                    }
                    else
                    {
                        break;
                    }
                    StartIndex = TempIndex;
                }
            }
            else
            {
                Content = Input;
            }
            string Encoding = "";

            try
            {
                Encoding = Header[Constants.TransferEncoding].Attributes[0].Value;
            }
            catch
            {
                Encoding = Constants.Encoding7Bit;
            }
            Code CodeUsing = CodeManager.Instance[Encoding];

            CodeUsing.CharacterSet = Header[Constants.ContentType][Constants.Charset];
            CodeUsing.Decode(Content, out _Content);
        }