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;
}
}
}
}