Exemplo n.º 1
0
        public void ConvertStringBoundaryBody()
        {
            foreach (POP3_BoundaryInfo bi in BoundaryInfoList.ToArray())
            {
                if (bi.BodyStartPosition == 0 && bi.BodyEndPosition == 0)
                {
                    continue;
                }

                if (string.Compare(bi.ContentTypeMain, "text", true) == 0)
                {
                    if (bi.ContentTypeCharSet.Length > 0)
                    {
                        bi.Encoding = Encoding.GetEncoding(bi.ContentTypeCharSet);
                    }
                    else
                    {
                        bi.Encoding = Encoding.Default;
                    }
                }
                else
                {
                    bi.Encoding = null;
                }

                /// 헤더 파싱
                if (string.Compare(bi.ContentTransferEncoding, "base64", true) == 0)
                {
                    if (bi.Encoding == null)
                    {
                        /// 첨부파일 -> Local File (ConvertBase64ToFile() 사용)
                    }
                    else
                    {
                        bi.ConvertBody = ConvertBase64ToString(GetBodyLines(bi));
                    }
                }
                else if (string.Compare(bi.ContentTransferEncoding, "quoted-printable", true) == 0)
                {
                    m_Encoding     = bi.Encoding;
                    bi.ConvertBody = ConvertQuotedPrintableToString(GetBodyLines(bi));
                }
            }
        }
Exemplo n.º 2
0
        private int ParseBodyBoundary(string startBoundaryID, int startRow, bool isAlternative = false)
        {
            string boundaryID = startBoundaryID;
            int    row        = startRow;
            int    resultRow  = 0;

            for (; row < m_MailMessageLines.Length; row++)
            {
                resultRow = FindStringInRow(string.Format("--{0}", boundaryID), row);
                if (resultRow == -1)
                {
                    resultRow = FindStringInRow(string.Format("--{0}--", boundaryID), row);
                    return(resultRow);
                }
                POP3_BoundaryInfo bi = ParseBoundaryHeader(boundaryID, resultRow);
                BoundaryInfoList.Add(bi);

                resultRow = bi.HeaderEndPosition;

                /// child 여부 확인
                if (bi.ChildBoundaryID == "")
                {
                    resultRow = FindStringInRow("", resultRow, false);

                    bi.BodyStartPosition = resultRow;

                    for (; resultRow < m_MailMessageLines.Length; resultRow++)
                    {
                        if (bi.BodyEndPosition < 0)
                        {
                            if (m_MailMessageLines[resultRow].IndexOf("--") == 0 ||
                                m_MailMessageLines[resultRow] == "")
                            {
                                bi.BodyEndPosition = resultRow - 1;
                            }
                        }
                        if (m_MailMessageLines[resultRow].IndexOf("--") == 0)
                        {
                            row = resultRow - 1;

                            if (isAlternative == true)
                            {
                                return(row);
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                }
                else
                {
                    int parseCount = 0;
                    for (; resultRow < m_MailMessageLines.Length; resultRow++)
                    {
                        if (m_MailMessageLines[resultRow] == string.Format("--{0}", bi.ChildBoundaryID))
                        {
                            resultRow = ParseBodyBoundary(bi.ChildBoundaryID, resultRow, true);

                            if ((string.Compare(bi.ContentTypeSub, "alternative", true) == 0) &&
                                (++parseCount < 2))
                            {
                                continue;
                            }

                            row = resultRow;
                            break;
                        }
                    }
                }
            }
            return(row);
        }