-2

メールからヘッダーと本文の情報を抽出しようとしています。次のコードは、ヘッダーと本文を生の形式で取得します。fromフィールド、subjectdate、およびを含む電子メール オブジェクトがありますbody。これらの値を電子メールから抽出し、電子メール オブジェクトに割り当てたいと思います。どうすれば回避できますか?streamReader.ReadLine()ヘッダー情報を取得したり、 a を使用して行を取得したりするなど、いくつかの方法を試しましたが、 illegal path exceptions. ライブラリを使用できることはわかっていますが、この方法で実現する必要があります。

つまり、IMAP コマンドはヘッダー情報を返します。そしてsubject、値、date値、sendere-amilなどを抽出し、それらを次のような値に対応する電子メールオブジェクトに割り当てたい

emailObject.subject = "subjectValue"


public class Imap
{

    static void Main(string[] args)
    {
        try
        {
            path = Environment.CurrentDirectory + "\\emailresponse.txt";

            if (System.IO.File.Exists(path))
                System.IO.File.Delete(path);

            sw = new System.IO.StreamWriter(System.IO.File.Create(path));

            tcpc = new System.Net.Sockets.TcpClient("imap.gmail.com", 993);

            ssl = new System.Net.Security.SslStream(tcpc.GetStream());
            ssl.AuthenticateAsClient("imap.gmail.com");
            receiveResponse("");

            Console.WriteLine("username : ");
            username = Console.ReadLine();

            Console.WriteLine("password : ");
            password = Console.ReadLine();
            receiveResponse("$ LOGIN " + username + " " + password + "  \r\n");
            Console.Clear();

            receiveResponse("$ LIST " + "\"\"" + " \"*\"" + "\r\n");

            receiveResponse("$ SELECT INBOX\r\n");

            receiveResponse("$ STATUS INBOX (MESSAGES)\r\n");


            Console.WriteLine("enter the email number to fetch :");
            int number = int.Parse(Console.ReadLine());

            Console.WriteLine("*************Header************");
            Console.WriteLine("");
           // receiveResponse("$ FETCH " + number + " body[header]\r\n");
           // BODY.PEEK[HEADER.FIELDS (SUBJECT)]

         //   StringBuilder sb = receiveResponse("$ FETCH " + number + " BODY.PEEK[HEADER.FIELDS (From Subject Date)]\r\n");
          StringBuilder sb= receiveResponse("$ FETCH " + number + " body.peek[header]\r\n");

             Console.WriteLine(sb);

            Console.WriteLine("");
            Console.WriteLine("Body");
            sb = new StringBuilder();
            sb=receiveResponse("$ FETCH " + number + " body[text]\r\n");

            System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
            byte[] serverbuff = new Byte[1024];
            int count = 0;
            string retval = enc.GetString(serverbuff, 0, count);

            Console.WriteLine(sb.ToString());

            receiveResponse("$ LOGOUT\r\n");
        }
        catch (Exception ex)
        {
            Console.WriteLine("error: " + ex.Message);
        }
        finally
        {
            if (sw != null)
            {
                sw.Close();
                sw.Dispose();
            }
            if (ssl != null)
            {
                ssl.Close();
                ssl.Dispose();
            }
            if (tcpc != null)
            {
                tcpc.Close();
            }
        }


        Console.ReadKey();
    }
    static StringBuilder receiveResponse(string command)
    {
        sb = new StringBuilder();
        try
        {
            if (command != "")
            {
                if (tcpc.Connected)
                {
                    dummy = Encoding.ASCII.GetBytes(command);
                    ssl.Write(dummy, 0, dummy.Length);
                }
                else
                {
                    throw new ApplicationException("TCP CONNECTION DISCONNECTED");
                }
            }
            ssl.Flush();


            buffer = new byte[2048];
            bytes = ssl.Read(buffer, 0, 2048);
            sb.Append(Encoding.ASCII.GetString(buffer));


          //  Console.WriteLine(sb.ToString());
            sw.WriteLine(sb.ToString());
           // sb = new StringBuilder();

            return sb;

        }
        catch (Exception ex)
        {
            throw new ApplicationException(ex.Message);
        }
    }
4

1 に答える 1