huyleuit
huyleuit

Reputation: 180

How to read the body of the message in the mail retrieve from gmail by using pop3 in c #?

This is code:

protected void Button9_Click(object sender, EventArgs e)
{
    try
    {
        // create an instance of TcpClient
        TcpClient tcpclient = new TcpClient();

        // HOST NAME POP SERVER and gmail uses port number 995 for POP
        tcpclient.Connect("pop.gmail.com", 995);

        // This is Secure Stream // opened the connection between client and POP Server
        System.Net.Security.SslStream sslstream = new SslStream(tcpclient.GetStream());

        // authenticate as client  
        sslstream.AuthenticateAsClient("pop.gmail.com");

        //bool flag = sslstream.IsAuthenticated;   // check flag

        // Asssigned the writer to stream 
        System.IO.StreamWriter sw = new StreamWriter(sslstream);

        // Assigned reader to stream
        System.IO.StreamReader reader = new StreamReader(sslstream);

        // refer POP rfc command, there very few around 6-9 command
        sw.WriteLine("USER [email protected]");

        // sent to server
        sw.Flush(); sw.WriteLine("PASS your_gmail_password");

        sw.Flush();

        // RETR 1 will retrive your first email. it will read content of your first email
        sw.WriteLine("RETR 1");
        sw.Flush();

        // close the connection
        sw.WriteLine("Quit ");
        sw.Flush(); string str = string.Empty;

        string strTemp = string.Empty;
        while ((strTemp = reader.ReadLine()) != null)
        {
            // find the . character in line
            if (strTemp == ".")
            {
                break;
            }
            if (strTemp.IndexOf("-ERR") != -1)
            {
                break;
            }
            str += strTemp;
        }

        textbox1.text = str;
        textbox1.text += "<BR>" + "Congratulation.. ....!!! You read your first gmail email ";
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }
}

The message body is a bunch of what appears to be random characters. I know it's not just a bunch of random characters but some code that needs to be parsed and converted. How can I read content in "message body"?

Upvotes: 3

Views: 21591

Answers (1)

giammin
giammin

Reputation: 18958

I know i'm not directly replying to your answer but reading email is a really complex task and I think you can achieve this better and faster with an external library instead of implementing it by yourself.

There are many good implementation, i usually use OpenPop.NET which works fine and is opensource.

https://sourceforge.net/projects/hpop/

You can find many example on internet because it is really popular.

http://hpop.sourceforge.net/examples.php

you can get all mail easly:

using(Pop3Client client = new Pop3Client())
{
    // Connect to the server
    client.Connect("pop.gmail.com", 995, true);

    // Authenticate ourselves towards the server
    client.Authenticate("[email protected]", "password", AuthenticationMethod.UsernameAndPassword);

    // Get the number of messages in the inbox
    int messageCount = client.GetMessageCount();

    // We want to download all messages
    List<Message> allMessages = new List<Message>(messageCount);

    // Messages are numbered in the interval: [1, messageCount]
    // Ergo: message numbers are 1-based.
    // Most servers give the latest message the highest number
    for (int i = messageCount; i > 0; i--)
    {
        allMessages.Add(client.GetMessage(i));
    }
}

you can get the full raw message

var mailbody = ASCIIEncoding.ASCII.GetString(message.RawMessage);

or if it is an utf8 encoded email:

var encodedStringAsBytes = System.Convert.FromBase64String(message.RawMessage); 
var rawMessage =System.Text.Encoding.UTF8.GetString(encodedStringAsBytes);

Instead if you want only the mail body you have to dig into the mail structure:

http://hpop.sourceforge.net/documentation/OpenPop~OpenPop.Mime.MessagePart.html

I know it is not an easy task but as I stated above emails are complex objects.

Upvotes: 6

Related Questions