Pop3

namespace ReadyPOP3

{

using Microsoft.VisualBasic;

using Microsoft.VisualBasic.CompilerServices;

using System;

using System.IO;

using System.Net.Sockets;

using System.Runtime.CompilerServices;

using System.Runtime.InteropServices;

using System.Text;

using System.Threading;

public class POP3Client

{

private string m_Host;

private string m_InstallDate;

private int m_MailboxSize;

private int m_MessageCount;

private NetworkStream m_NetworkStream;

private string m_Password;

private POP3ServerState m_POP3ServerState = POP3ServerState.Disconnected;

private int m_Port = 110;

private string m_SerDate;

private string m_Serial;

private TcpClient m_Server;

private StreamReader m_StreamReader;

private string m_Username;

private object CheckSerial(string vSerial)

{

object obj2 = null;

object obj3 = null;

object obj5 = null;

object obj6 = null;

object objectValue = null;

object obj13 = null;

if (Strings.Len(vSerial) != 0x1c)

{

Information.Err().Raise(0x114f, null, "Invalid Serial Number", null, null);

return obj2;

}

object obj10 = Strings.Mid(vSerial, 15, 1) + Strings.Mid(vSerial, 4, 1) + Strings.Mid(vSerial, 8, 1);

if (FlowControl.ForLoopInitObj(obj3, 1, Strings.Len(RuntimeHelpers.GetObjectValue(obj10)), 1, ref obj13, ref obj3))

{

do

{

string sLeft = Strings.Mid(StringType.FromObject(obj10), IntegerType.FromObject(obj3), 1);

if (StringType.StrCmp(sLeft, "A", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "1");

}

else if (StringType.StrCmp(sLeft, "W", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "2");

}

else if (StringType.StrCmp(sLeft, "y", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "3");

}

else if (StringType.StrCmp(sLeft, "C", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "4");

}

else if (StringType.StrCmp(sLeft, "F", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "5");

}

else if (StringType.StrCmp(sLeft, "U", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "6");

}

else if (StringType.StrCmp(sLeft, "f", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "7");

}

else if (StringType.StrCmp(sLeft, "b", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "8");

}

else if (StringType.StrCmp(sLeft, "X", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "9");

}

else if (StringType.StrCmp(sLeft, "L", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "10");

}

else if (StringType.StrCmp(sLeft, "d", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "11");

}

else if (StringType.StrCmp(sLeft, "l", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "12");

}

else if (StringType.StrCmp(sLeft, "h", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "13");

}

else if (StringType.StrCmp(sLeft, "O", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "14");

}

else if (StringType.StrCmp(sLeft, "w", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "15");

}

else if (StringType.StrCmp(sLeft, "J", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "16");

}

else if (StringType.StrCmp(sLeft, "n", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "17");

}

else if (StringType.StrCmp(sLeft, "Q", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "18");

}

else if (StringType.StrCmp(sLeft, "H", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "19");

}

else if (StringType.StrCmp(sLeft, "R", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "20");

}

else if (StringType.StrCmp(sLeft, "u", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "21");

}

else if (StringType.StrCmp(sLeft, "r", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "22");

}

else if (StringType.StrCmp(sLeft, "I", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "23");

}

else if (StringType.StrCmp(sLeft, "a", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "24");

}

else if (StringType.StrCmp(sLeft, "D", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "25");

}

else if (StringType.StrCmp(sLeft, "c", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "26");

}

else if (StringType.StrCmp(sLeft, "Y", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "27");

}

else if (StringType.StrCmp(sLeft, "N", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "28");

}

else if (StringType.StrCmp(sLeft, "p", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "29");

}

else if (StringType.StrCmp(sLeft, "i", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "30");

}

else if (StringType.StrCmp(sLeft, "S", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "31");

}

else if (StringType.StrCmp(sLeft, "x", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "0");

}

else if (StringType.StrCmp(sLeft, "E", false) == 0)

{

objectValue = ObjectType.StrCatObj(objectValue, "00");

}

else if (StringType.StrCmp(sLeft, "q", false) == 0)

{

objectValue = RuntimeHelpers.GetObjectValue(objectValue);

}

}

while (FlowControl.ForNextCheckObj(obj3, obj13, ref obj3));

}

object obj12 = Strings.Mid(vSerial, 0x16, 1);

if (ObjectType.ObjTst(obj12, "A", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "1");

}

else if (ObjectType.ObjTst(obj12, "W", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "2");

}

else if (ObjectType.ObjTst(obj12, "y", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "3");

}

else if (ObjectType.ObjTst(obj12, "C", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "4");

}

else if (ObjectType.ObjTst(obj12, "F", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "5");

}

else if (ObjectType.ObjTst(obj12, "U", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "6");

}

else if (ObjectType.ObjTst(obj12, "f", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "7");

}

else if (ObjectType.ObjTst(obj12, "b", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "8");

}

else if (ObjectType.ObjTst(obj12, "X", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "9");

}

else if (ObjectType.ObjTst(obj12, "L", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "10");

}

else if (ObjectType.ObjTst(obj12, "d", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "11");

}

else if (ObjectType.ObjTst(obj12, "l", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "12");

}

else if (ObjectType.ObjTst(obj12, "h", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "13");

}

else if (ObjectType.ObjTst(obj12, "O", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "14");

}

else if (ObjectType.ObjTst(obj12, "w", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "15");

}

else if (ObjectType.ObjTst(obj12, "J", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "16");

}

else if (ObjectType.ObjTst(obj12, "n", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "17");

}

else if (ObjectType.ObjTst(obj12, "Q", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "18");

}

else if (ObjectType.ObjTst(obj12, "H", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "19");

}

else if (ObjectType.ObjTst(obj12, "R", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "20");

}

else if (ObjectType.ObjTst(obj12, "u", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "21");

}

else if (ObjectType.ObjTst(obj12, "r", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "22");

}

else if (ObjectType.ObjTst(obj12, "I", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "23");

}

else if (ObjectType.ObjTst(obj12, "a", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "24");

}

else if (ObjectType.ObjTst(obj12, "D", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "25");

}

else if (ObjectType.ObjTst(obj12, "c", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "26");

}

else if (ObjectType.ObjTst(obj12, "Y", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "27");

}

else if (ObjectType.ObjTst(obj12, "N", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "28");

}

else if (ObjectType.ObjTst(obj12, "p", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "29");

}

else if (ObjectType.ObjTst(obj12, "i", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "30");

}

else if (ObjectType.ObjTst(obj12, "S", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "31");

}

else if (ObjectType.ObjTst(obj12, "x", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "0");

}

else if (ObjectType.ObjTst(obj12, "E", false) == 0)

{

obj6 = ObjectType.StrCatObj(obj6, "00");

}

else if (ObjectType.ObjTst(obj12, "q", false) == 0)

{

obj6 = RuntimeHelpers.GetObjectValue(obj6);

}

object obj11 = Strings.Mid(vSerial, 12, 1);

if (ObjectType.ObjTst(obj11, "A", false) == 0)

{

obj5 = "1";

}

else if (ObjectType.ObjTst(obj11, "W", false) == 0)

{

obj5 = "2";

}

else if (ObjectType.ObjTst(obj11, "y", false) == 0)

{

obj5 = "3";

}

else if (ObjectType.ObjTst(obj11, "C", false) == 0)

{

obj5 = "4";

}

else if (ObjectType.ObjTst(obj11, "F", false) == 0)

{

obj5 = "5";

}

else if (ObjectType.ObjTst(obj11, "U", false) == 0)

{

obj5 = "6";

}

else if (ObjectType.ObjTst(obj11, "f", false) == 0)

{

obj5 = "7";

}

else if (ObjectType.ObjTst(obj11, "b", false) == 0)

{

obj5 = "8";

}

else if (ObjectType.ObjTst(obj11, "X", false) == 0)

{

obj5 = "9";

}

else if (ObjectType.ObjTst(obj11, "L", false) == 0)

{

obj5 = "10";

}

else if (ObjectType.ObjTst(obj11, "d", false) == 0)

{

obj5 = "11";

}

else if (ObjectType.ObjTst(obj11, "l", false) == 0)

{

obj5 = "12";

}

else if (ObjectType.ObjTst(obj11, "h", false) == 0)

{

obj5 = "13";

}

else if (ObjectType.ObjTst(obj11, "O", false) == 0)

{

obj5 = "14";

}

else if (ObjectType.ObjTst(obj11, "w", false) == 0)

{

obj5 = "15";

}

else if (ObjectType.ObjTst(obj11, "J", false) == 0)

{

obj5 = "16";

}

else if (ObjectType.ObjTst(obj11, "n", false) == 0)

{

obj5 = "17";

}

else if (ObjectType.ObjTst(obj11, "Q", false) == 0)

{

obj5 = "18";

}

else if (ObjectType.ObjTst(obj11, "H", false) == 0)

{

obj5 = "19";

}

else if (ObjectType.ObjTst(obj11, "R", false) == 0)

{

obj5 = "20";

}

else if (ObjectType.ObjTst(obj11, "u", false) == 0)

{

obj5 = "21";

}

else if (ObjectType.ObjTst(obj11, "r", false) == 0)

{

obj5 = "22";

}

else if (ObjectType.ObjTst(obj11, "I", false) == 0)

{

obj5 = "23";

}

else if (ObjectType.ObjTst(obj11, "a", false) == 0)

{

obj5 = "24";

}

else if (ObjectType.ObjTst(obj11, "D", false) == 0)

{

obj5 = "25";

}

else if (ObjectType.ObjTst(obj11, "c", false) == 0)

{

obj5 = "26";

}

else if (ObjectType.ObjTst(obj11, "Y", false) == 0)

{

obj5 = "27";

}

else if (ObjectType.ObjTst(obj11, "N", false) == 0)

{

obj5 = "28";

}

else if (ObjectType.ObjTst(obj11, "p", false) == 0)

{

obj5 = "29";

}

else if (ObjectType.ObjTst(obj11, "i", false) == 0)

{

obj5 = "30";

}

else if (ObjectType.ObjTst(obj11, "S", false) == 0)

{

obj5 = "31";

}

else if (ObjectType.ObjTst(obj11, "x", false) == 0)

{

obj5 = "0";

}

else if (ObjectType.ObjTst(obj11, "E", false) == 0)

{

obj5 = "00";

}

else if (ObjectType.ObjTst(obj11, "q", false) == 0)

{

obj5 = RuntimeHelpers.GetObjectValue(obj5);

}

object obj4 = ObjectType.StrCatObj(ObjectType.StrCatObj(ObjectType.StrCatObj(ObjectType.StrCatObj(obj6, "/"), obj5), "/"), objectValue);

try

{

obj2 = DateTime.Compare(DateTime.Now, DateAndTime.DateAdd("d", 30.0, DateTime.Parse(StringType.FromObject(obj4)))) < 0;

}

catch (Exception exception1)

{

ProjectData.SetProjectError(exception1);

Information.Err().Raise(0x1150, null, "Error 4432: Invalid Serial Number", null, null);

ProjectData.ClearProjectError();

}

return obj2;

}

public void Connect()

{

/*if (BooleanType.FromObject(ObjectType.NotObj(this.CheckSerial(this.m_Serial))))

{

Information.Err().Raise(0x1bc, null, "Demo version has expired", null, null);

}*/

this.m_Server = new TcpClient(this.m_Host, this.m_Port);

this.m_POP3ServerState = POP3ServerState.Authorization;

try

{

this.m_NetworkStream = this.m_Server.GetStream();

this.m_StreamReader = new StreamReader(this.m_NetworkStream);

string str = "";

do

{

str = this.m_StreamReader.ReadLine();

Thread.Sleep(0);

}

while (str.Length == 0);

}

catch (Exception exception1)

{

ProjectData.SetProjectError(exception1);

this.m_POP3ServerState = POP3ServerState.Disconnected;

ProjectData.ClearProjectError();

}

this.User();

this.Pass();

}

public void Delete(int messageNumber)

{

this.Exec("DELE " + StringType.FromInteger(messageNumber), false);

}

public void Disconnect()

{

if (this.m_Server != null)

{

this.m_Server.Close();

this.m_POP3ServerState = POP3ServerState.Disconnected;

}

}

public string Exec(string cmd, [Optional, DefaultParameterValue(false)] bool Multiline)

{

if (this.m_POP3ServerState == POP3ServerState.Disconnected)

{

return null;

}

cmd = cmd + "\r\n";

StringBuilder builder = new StringBuilder();

byte[] bytes = Encoding.ASCII.GetBytes(cmd.ToCharArray());

bool flag = true;

try

{

this.m_NetworkStream.Write(bytes, 0, bytes.Length);

do

{

Thread.Sleep(0);

string strA = this.m_StreamReader.ReadLine();

if (flag & strA.StartsWith("-"))

{

Multiline = false;

}

flag = false;

if (Multiline)

{

if (string.Compare(strA, ".") == 0)

{

Multiline = false;

}

else if (strA.StartsWith("."))

{

builder.Append(strA.Substring(1, strA.Length - 1) + "\r\n");

}

else

{

builder.Append(strA + "\r\n");

}

}

else

{

builder.Append(strA + "\r\n");

}

}

while (Multiline);

}

catch (Exception exception1)

{

ProjectData.SetProjectError(exception1);

this.m_POP3ServerState = POP3ServerState.Disconnected;

ProjectData.ClearProjectError();

}

return builder.ToString();

}

~POP3Client()

{

}

public string List([Optional, DefaultParameterValue(0)] int messageNumber)

{

if (messageNumber == 0)

{

return this.Exec("LIST", true);

}

return this.Exec("LIST " + StringType.FromInteger(messageNumber), false);

}

public void Noop()

{

this.Exec("NOOP", false);

}

public void Pass()

{

if (this.Exec("PASS " + this.m_Password, false).StartsWith("+"))

{

this.m_POP3ServerState = POP3ServerState.Transaction;

}

}

public void Quit()

{

this.Exec("QUIT", false);

this.m_POP3ServerState = POP3ServerState.Authorization;

}

private string RemoveStatusLine(string dat)

{

if (dat == null)

{

return null;

}

if (dat.StartsWith("+"))

{

return dat.Substring(dat.IndexOf("\r\n") + 2);

}

return dat;

}

public string Retr(int messageNumber)

{

return this.RemoveStatusLine(this.Exec("RETR " + StringType.FromInteger(messageNumber), true));

}

public void Rset()

{

this.Exec("RSET", false);

}

public void Stat()

{

string[] strArray = this.Exec("STAT", false).Split(new char[] { ' ' });

if (strArray.Length == 3)

{

try

{

this.m_MessageCount = Convert.ToInt32(strArray[1]);

this.m_MailboxSize = Convert.ToInt32(strArray[2]);

}

catch (Exception exception1)

{

ProjectData.SetProjectError(exception1);

ProjectData.ClearProjectError();

}

}

}

public string Top(int messageNumber, int NumberOfLines)

{

return this.RemoveStatusLine(this.Exec("TOP " + StringType.FromInteger(messageNumber) + " " + StringType.FromInteger(NumberOfLines), true) + "\r\n");

}

public string Uidl([Optional, DefaultParameterValue(0)] int messageNumber)

{

if (messageNumber == 0)

{

return this.Exec("UIDL", true);

}

return this.Exec("UIDL " + StringType.FromInteger(messageNumber), false);

}

public void User()

{

this.Exec("USER " + this.m_Username, false);

}

public string Host

{

get

{

return this.m_Host;

}

set

{

this.m_Host = value;

}

}

public int MailboxSize

{

get

{

return this.m_MailboxSize;

}

}

public int MessageCount

{

get

{

return this.m_MessageCount;

}

}

public string Password

{

get

{

return this.m_Password;

}

set

{

this.m_Password = value;

}

}

public int Port

{

get

{

return this.m_Port;

}

set

{

this.m_Port = value;

}

}

public string SerDate

{

get

{

this.m_SerDate = StringType.FromObject(this.CheckSerial(this.m_Serial));

return this.m_SerDate;

}

}

public string Serial

{

get

{

return this.m_Serial;

}

set

{

this.m_Serial = value;

}

}

private TcpClient Server

{

get

{

return this.m_Server;

}

set

{

this.m_Server = value;

}

}

public POP3ServerState ServerState

{

get

{

try

{

this.m_Server.GetStream();

}

catch (Exception exception1)

{

ProjectData.SetProjectError(exception1);

this.m_POP3ServerState = POP3ServerState.Disconnected;

ProjectData.ClearProjectError();

}

return this.m_POP3ServerState;

}

}

public string Username

{

get

{

return this.m_Username;

}

set

{

this.m_Username = value;

}

}

}

}