示例#1
0
        public void TestSetup()
        {
            m_EndOfMessageStrategy = new BasicEndOfMessageStrategy();
            m_Reader = new MailReader();
            char[] ar  = MIMERTests.Strings.MailMessage1.ToCharArray();
            byte[] bar = Array.ConvertAll <char, byte>(ar, new Converter <char, byte>(
                                                           delegate(char input) { return((byte)input); }));
            m_Stream = new MemoryStream(bar);

            StringBuilder builder = new StringBuilder();

            for (int i = 0; i < 100; i++)
            {
                builder.Append(MIMERTests.Strings.MailMessage1);
            }

            var multiMessageBytes = from char c in builder.ToString() select Convert.ToByte(c);

            m_MultiMessageStream = new MemoryStream(multiMessageBytes.ToArray());

            m_EmptyStream = new MemoryStream();

            IEnumerable <byte> mailMessageWithAttachmentBytes = from char c in Strings.MailMessageWithAttachment select Convert.ToByte(c);

            m_AttachmentStream = new MemoryStream(mailMessageWithAttachmentBytes.ToArray());

            m_EmbeddedMessagaesStream =
                new MemoryStream(System.Text.Encoding.ASCII.GetBytes(
                                     MIMERTests.Strings.MailMessageWithRecursivlyEmbeddedMessage));

            m_EmbeddedWithAttachmentsStream =
                new MemoryStream(System.Text.Encoding.ASCII.GetBytes(
                                     MIMERTests.Strings.MailMessageWithEmbeddedWithAttachments));
        }
示例#2
0
 public MailReader()
 {
     m_FieldParser = new FieldParser();
     m_FieldParser.CompilePattern();
     m_Criterias         = new List <IEndCriteriaStrategy>();
     m_EndOfLineStrategy = new EndOfLineStrategy();
     m_NullLineStrategy  = new NullLineStrategy();
 }
示例#3
0
        public IMimeMailMessage ReadMimeMessage(ref Stream dataStream, IEndCriteriaStrategy endOfMessageCriteria)
        {
            m_EndOfMessageStrategy = endOfMessageCriteria;

            if (dataStream == null)
            {
                throw new ArgumentNullException("dataStream");
            }

            m_BytesRead = 0;
            m_Source    = new StringBuilder();
            IList <RFC822.Field> fields;
            // 读消息头
            int cause = ParseFields(ref dataStream, out fields);

            if (fields.Count == 0)
            {
                return(new NullMessage());
            }

            Message m = new Message();

            m.Fields = fields;

            if (cause < 1)
            {
                return(m);
            }

            // 判断是文本邮件还是多媒体邮件
            if (isMIME(ref fields))
            {
                string delimiter = ParseMessage(ref dataStream, ref m, fields);
            }
            else
            {
                IMailMessage im = m as IMailMessage;
                base.ReadBody(ref dataStream, ref im);
            }

            m.Source = m_Source.ToString();
            m_Source = null;
            return(m as IMimeMailMessage);
        }
示例#4
0
        public IMailMessage Read(ref Stream dataStream, IEndCriteriaStrategy endOfMessageCriteria)
        {
            m_BytesRead            = 0;
            m_EndOfMessageStrategy = endOfMessageCriteria;
            Message      m  = new Message();
            IMailMessage im = m as IMailMessage;

            m_Source = new StringBuilder();
            IList <RFC822.Field> fields;
            int cause = ParseFields(ref dataStream, out fields);

            m.Fields = fields;
            if (cause > 0)
            {
                ReadBody(ref dataStream, ref im);
            }
            m.Source = m_Source.ToString();
            return(m);
        }
示例#5
0
        public IMailMessage Read(ref System.IO.Stream dataStream, IEndCriteriaStrategy endOfMessageCriteria)
        {
            m_EndOfMessageCriteria = endOfMessageCriteria;
            m_BytesRead            = 0;

            Message      m  = new Message();
            IMailMessage im = m as IMailMessage;

            m_Source = new StringBuilder();
            var result = m_FieldParser.ParseFields(ref dataStream, new DataReader(endOfMessageCriteria));

            m.Fields = result.Data;

            if (result.FulfilledCritera >= 0)
            {
                ReadBody(ref dataStream, ref im);
            }
            m.Source = m_Source.ToString();
            return(m);
        }
示例#6
0
 /// <summary>
 /// Reads and parses a mail message from the supplied Stream.
 /// </summary>
 /// <param name="dataStream">The Stream to read from. </param>
 /// <param name="endOfMessageCriteria">The refereance to the object which can determine
 /// the end of a message.</param>
 /// <returns>A new IMailMessage.</returns>
 public new IMailMessage Read(ref System.IO.Stream dataStream, IEndCriteriaStrategy endOfMessageCriteria)
 {
     return(ReadMimeMessage(ref dataStream, endOfMessageCriteria) as IMailMessage);
 }
示例#7
0
        /// <summary>
        /// Reads and parses a mail message from the supplied Stream.
        /// </summary>
        /// <param name="dataStream">The Stream to read from. </param>
        /// <param name="endOfMessageCriteria">The refereance to the object which can determine
        /// the end of a message.</param>
        /// <returns>A new IMimeMailMessage.</returns>
        public IMimeMailMessage ReadMimeMessage(ref System.IO.Stream dataStream, IEndCriteriaStrategy endOfMessageCriteria)
        {
            m_EndOfMessageCriteria = endOfMessageCriteria;

            if (dataStream == null)
                throw new ArgumentNullException("dataStream");

            m_BytesRead = 0;
            m_Source = new StringBuilder();
            IList<MIMER.RFC822.Field> fields;
            int cause = ParseFields(ref dataStream, out fields);

            if (fields.Count == 0)
                return new NullMessage();

            Message m = new Message();
            m.Fields = fields;

            if (cause < 0)
            {
                return m as IMimeMailMessage;
            }

            if (isMIME(ref fields))
            {
                string delimiter = ParseMessage(ref dataStream, ref m, fields);
            }
            else
            {
                IMailMessage im = m as IMailMessage;
                base.ReadBody(ref dataStream, ref im);
            }

            m.Source = m_Source.ToString();
            m_Source = null;
            return m as IMimeMailMessage;
        }
示例#8
0
 /// <summary>
 /// Reads and parses a mail message from the supplied Stream.
 /// </summary>
 /// <param name="dataStream">The Stream to read from. </param>
 /// <param name="endOfMessageCriteria">The refereance to the object which can determine
 /// the end of a message.</param>
 /// <returns>A new IMailMessage.</returns>
 public new IMailMessage Read(ref System.IO.Stream dataStream, IEndCriteriaStrategy endOfMessageCriteria)
 {
     return ReadMimeMessage(ref dataStream, endOfMessageCriteria) as IMailMessage;
 }
示例#9
0
        public void TestSetup()
        {
            m_EndOfMessageStrategy = new BasicEndOfMessageStrategy();
            m_Reader = new MailReader();
            char[] ar = MIMERTests.Strings.MailMessage1.ToCharArray();
            byte[] bar = Array.ConvertAll<char, byte>(ar, new Converter<char, byte>(
                delegate(char input) { return (byte)input; }));
            m_Stream = new MemoryStream(bar);

            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < 100; i++)
            {
                builder.Append(MIMERTests.Strings.MailMessage1);
            }

            var multiMessageBytes = from char c in builder.ToString() select Convert.ToByte(c);
            m_MultiMessageStream = new MemoryStream(multiMessageBytes.ToArray());

            m_EmptyStream = new MemoryStream();

            IEnumerable<byte> mailMessageWithAttachmentBytes = from char c in Strings.MailMessageWithAttachment select Convert.ToByte(c);
            m_AttachmentStream = new MemoryStream(mailMessageWithAttachmentBytes.ToArray());

            m_EmbeddedMessagaesStream =
                new MemoryStream(System.Text.Encoding.ASCII.GetBytes(
                MIMERTests.Strings.MailMessageWithRecursivlyEmbeddedMessage));

            m_EmbeddedWithAttachmentsStream =
                new MemoryStream(System.Text.Encoding.ASCII.GetBytes(
                MIMERTests.Strings.MailMessageWithEmbeddedWithAttachments));
        }