You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

863 lines
34 KiB
C#

/*
* Created by SharpDevelop.
* User: Johannes
* Date: 10.06.2005
* Time: 12:55
*/
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Configuration;
using CheckMail.Properties;
namespace CheckMail
{
/// <summary>
/// Description of MainForm.
/// </summary>
public class CheckMail : System.Windows.Forms.Form
{
private System.ComponentModel.IContainer components;
private System.Windows.Forms.ListBox lbMsgDetails;
private System.Windows.Forms.Label lNeueEmails;
private System.Windows.Forms.ListBox lbFolders;
private System.Windows.Forms.Button btnCheckNow;
private System.Windows.Forms.Button btnOK;
private System.Windows.Forms.NotifyIcon notifyIcon1;
private TcpClient cl = null; //Globaler TcpClient
private NetworkStream str = null; //Globaler Netzwerkstream
private int neueEmails = 0; //Anzahl der neuen Emails
private TextBox tbUser; //Textbox Benutzername
private TextBox tbPass; //Textbox Passwort
private string GlobalSenders = ""; //String Liste aller Sender neuer Emails
private string user = ""; //Benutzername
private CheckBox cbAutoCheck; //Checkbox AutoCheck ja/nein
private NumericUpDown nUDIntervall; //Periode mit der geprüft wird
private Label label1;
private System.Windows.Forms.Timer timer1;
private ContextMenuStrip contextMenuStrip1;
private ToolStripMenuItem BeendenToolStripMenuItem;
private ToolStripMenuItem minimierenToolStripMenuItem;
private ToolStripMenuItem tothefrontToolStripMenuItem;
private string pass = ""; //Passwort
private Thread t = null;
private Button btnBeenden;
private ToolStripMenuItem ÜberToolStripMenuItem;
private StatusStrip statusStrip1;
private ToolStripStatusLabel toolStripStatusLabel1;
private Button bProxy;
private Settings sett = new Settings();
private delegate void ClearFolderListHandler();
private delegate void AddFolderListItemHandler(string text);
private delegate void ClearMsgDetailsListHandler();
private delegate void AddMsgDetailsListItemHandler(string text);
private delegate void SetNeueEmailLabelHandler(string text);
private delegate void SetNotifyIconTextHandler(string text);
private delegate void SetBtnCheckNowEnabledHandler(bool enabled);
private delegate void SetSchließenToolStripMenuItemEnabledHandler(bool enabled);
private delegate void SetBtnBeendenEnabledHandler(bool enabled);
public CheckMail()
{
InitializeComponent();
tbUser.Text = sett.user;
tbPass.Text = sett.pass;
toolStripStatusLabel1.Text = "Fertig";
}
[STAThread]
public static void Main(string[] args)
{
Application.Run(new CheckMail());
}
#region Windows Forms Designer generated code
/// <summary>
/// This method is required for Windows Forms designer support.
/// Do not change the method contents inside the source code editor. The Forms designer might
/// not be able to load this method if it was changed manually.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CheckMail));
this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.ÜberToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.minimierenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.tothefrontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.BeendenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.btnOK = new System.Windows.Forms.Button();
this.btnCheckNow = new System.Windows.Forms.Button();
this.lbFolders = new System.Windows.Forms.ListBox();
this.lNeueEmails = new System.Windows.Forms.Label();
this.lbMsgDetails = new System.Windows.Forms.ListBox();
this.tbUser = new System.Windows.Forms.TextBox();
this.tbPass = new System.Windows.Forms.TextBox();
this.cbAutoCheck = new System.Windows.Forms.CheckBox();
this.nUDIntervall = new System.Windows.Forms.NumericUpDown();
this.label1 = new System.Windows.Forms.Label();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.btnBeenden = new System.Windows.Forms.Button();
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
this.bProxy = new System.Windows.Forms.Button();
this.contextMenuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDIntervall)).BeginInit();
this.statusStrip1.SuspendLayout();
this.SuspendLayout();
//
// notifyIcon1
//
this.notifyIcon1.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info;
this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip1;
this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));
this.notifyIcon1.Text = "0 neue Emails";
this.notifyIcon1.Visible = true;
this.notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);
//
// contextMenuStrip1
//
this.contextMenuStrip1.Enabled = true;
this.contextMenuStrip1.GripMargin = new System.Windows.Forms.Padding(2);
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ÜberToolStripMenuItem,
this.minimierenToolStripMenuItem,
this.tothefrontToolStripMenuItem,
this.BeendenToolStripMenuItem});
this.contextMenuStrip1.Location = new System.Drawing.Point(78, 0);
this.contextMenuStrip1.Name = "contextMenuStrip1";
this.contextMenuStrip1.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.contextMenuStrip1.Size = new System.Drawing.Size(158, 92);
//
// ÜberToolStripMenuItem
//
this.ÜberToolStripMenuItem.Name = "ÜberToolStripMenuItem";
this.ÜberToolStripMenuItem.Text = "Über...";
this.ÜberToolStripMenuItem.Click += new System.EventHandler(this.ÜberToolStripMenuItem_Click);
//
// minimierenToolStripMenuItem
//
this.minimierenToolStripMenuItem.Name = "minimierenToolStripMenuItem";
this.minimierenToolStripMenuItem.Text = "Minimieren";
this.minimierenToolStripMenuItem.Click += new System.EventHandler(this.minimierenToolStripMenuItem_Click);
//
// tothefrontToolStripMenuItem
//
this.tothefrontToolStripMenuItem.Name = "tothefrontToolStripMenuItem";
this.tothefrontToolStripMenuItem.Text = "In den Vordergrund";
this.tothefrontToolStripMenuItem.Click += new System.EventHandler(this.tothefrontToolStripMenuItem_Click);
//
// BeendenToolStripMenuItem
//
this.BeendenToolStripMenuItem.Name = "BeendenToolStripMenuItem";
this.BeendenToolStripMenuItem.Text = "Beenden";
this.BeendenToolStripMenuItem.Click += new System.EventHandler(this.BeendenToolStripMenuItem_Click);
//
// btnOK
//
this.btnOK.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnOK.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.btnOK.Location = new System.Drawing.Point(408, 410);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(136, 23);
this.btnOK.TabIndex = 6;
this.btnOK.Text = "&Minimize to Tray";
this.btnOK.Click += new System.EventHandler(this.BtnOKClick);
//
// btnCheckNow
//
this.btnCheckNow.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnCheckNow.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.btnCheckNow.Location = new System.Drawing.Point(228, 10);
this.btnCheckNow.Name = "btnCheckNow";
this.btnCheckNow.Size = new System.Drawing.Size(104, 23);
this.btnCheckNow.TabIndex = 3;
this.btnCheckNow.Text = "Check &Now";
this.btnCheckNow.Click += new System.EventHandler(this.BtnCheckNowClick);
//
// lbFolders
//
this.lbFolders.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.lbFolders.FormattingEnabled = true;
this.lbFolders.HorizontalScrollbar = true;
this.lbFolders.Location = new System.Drawing.Point(12, 38);
this.lbFolders.Name = "lbFolders";
this.lbFolders.SelectionMode = System.Windows.Forms.SelectionMode.None;
this.lbFolders.Size = new System.Drawing.Size(137, 366);
this.lbFolders.TabIndex = 2;
this.lbFolders.TabStop = false;
//
// lNeueEmails
//
this.lNeueEmails.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lNeueEmails.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.lNeueEmails.Location = new System.Drawing.Point(14, 410);
this.lNeueEmails.Name = "lNeueEmails";
this.lNeueEmails.Size = new System.Drawing.Size(208, 21);
this.lNeueEmails.TabIndex = 11;
this.lNeueEmails.Text = "Neue Emails:";
this.lNeueEmails.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// lbMsgDetails
//
this.lbMsgDetails.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.lbMsgDetails.FormattingEnabled = true;
this.lbMsgDetails.HorizontalScrollbar = true;
this.lbMsgDetails.Location = new System.Drawing.Point(157, 38);
this.lbMsgDetails.Name = "lbMsgDetails";
this.lbMsgDetails.SelectionMode = System.Windows.Forms.SelectionMode.None;
this.lbMsgDetails.Size = new System.Drawing.Size(387, 366);
this.lbMsgDetails.TabIndex = 12;
this.lbMsgDetails.TabStop = false;
//
// tbUser
//
this.tbUser.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tbUser.Location = new System.Drawing.Point(12, 12);
this.tbUser.Name = "tbUser";
this.tbUser.Size = new System.Drawing.Size(102, 20);
this.tbUser.TabIndex = 1;
this.tbUser.Text = "J.Schauer";
this.tbUser.TextChanged += new System.EventHandler(this.tbUser_TextChanged);
//
// tbPass
//
this.tbPass.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tbPass.Location = new System.Drawing.Point(120, 12);
this.tbPass.Name = "tbPass";
this.tbPass.PasswordChar = '*';
this.tbPass.Size = new System.Drawing.Size(102, 20);
this.tbPass.TabIndex = 2;
this.tbPass.Text = "porenta";
this.tbPass.TextChanged += new System.EventHandler(this.tbPass_TextChanged);
//
// cbAutoCheck
//
this.cbAutoCheck.AutoSize = true;
this.cbAutoCheck.Checked = true;
this.cbAutoCheck.CheckState = System.Windows.Forms.CheckState.Checked;
this.cbAutoCheck.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbAutoCheck.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.cbAutoCheck.Location = new System.Drawing.Point(338, 13);
this.cbAutoCheck.Name = "cbAutoCheck";
this.cbAutoCheck.Size = new System.Drawing.Size(94, 17);
this.cbAutoCheck.TabIndex = 4;
this.cbAutoCheck.Text = "Auto Check alle";
this.cbAutoCheck.CheckedChanged += new System.EventHandler(this.cbAutoCheck_CheckedChanged);
//
// nUDIntervall
//
this.nUDIntervall.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.nUDIntervall.Location = new System.Drawing.Point(438, 12);
this.nUDIntervall.Maximum = new decimal(new int[] {
60,
0,
0,
0});
this.nUDIntervall.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.nUDIntervall.Name = "nUDIntervall";
this.nUDIntervall.Size = new System.Drawing.Size(51, 20);
this.nUDIntervall.TabIndex = 5;
this.nUDIntervall.Value = new decimal(new int[] {
5,
0,
0,
0});
this.nUDIntervall.ValueChanged += new System.EventHandler(this.nUDIntervall_ValueChanged);
//
// label1
//
this.label1.AutoSize = true;
this.label1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.label1.Location = new System.Drawing.Point(495, 15);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(41, 13);
this.label1.TabIndex = 13;
this.label1.Text = "Minuten";
//
// timer1
//
this.timer1.Enabled = true;
this.timer1.Interval = 300000;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// btnBeenden
//
this.btnBeenden.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnBeenden.Location = new System.Drawing.Point(321, 410);
this.btnBeenden.Name = "btnBeenden";
this.btnBeenden.Size = new System.Drawing.Size(81, 23);
this.btnBeenden.TabIndex = 14;
this.btnBeenden.Text = "&Beenden";
this.btnBeenden.Click += new System.EventHandler(this.btnBeenden_Click);
//
// statusStrip1
//
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripStatusLabel1});
this.statusStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Table;
this.statusStrip1.Location = new System.Drawing.Point(0, 439);
this.statusStrip1.Name = "statusStrip1";
this.statusStrip1.Size = new System.Drawing.Size(556, 22);
this.statusStrip1.SizingGrip = false;
this.statusStrip1.TabIndex = 15;
this.statusStrip1.Text = "statusStrip1";
//
// toolStripStatusLabel1
//
this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";
this.toolStripStatusLabel1.Spring = true;
this.toolStripStatusLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// bProxy
//
this.bProxy.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.bProxy.Location = new System.Drawing.Point(157, 410);
this.bProxy.Name = "bProxy";
this.bProxy.Size = new System.Drawing.Size(71, 23);
this.bProxy.TabIndex = 16;
this.bProxy.Text = "Proxy";
//
// CheckMail
//
this.AcceptButton = this.btnCheckNow;
this.ClientSize = new System.Drawing.Size(556, 461);
this.ControlBox = false;
this.Controls.Add(this.bProxy);
this.Controls.Add(this.statusStrip1);
this.Controls.Add(this.btnBeenden);
this.Controls.Add(this.tbPass);
this.Controls.Add(this.nUDIntervall);
this.Controls.Add(this.label1);
this.Controls.Add(this.tbUser);
this.Controls.Add(this.lbMsgDetails);
this.Controls.Add(this.lNeueEmails);
this.Controls.Add(this.cbAutoCheck);
this.Controls.Add(this.btnOK);
this.Controls.Add(this.btnCheckNow);
this.Controls.Add(this.lbFolders);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "CheckMail";
this.ShowInTaskbar = false;
this.Text = "CheckMail";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.CheckMail_FormClosed);
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.CheckMail_FormClosing);
this.contextMenuStrip1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.nUDIntervall)).EndInit();
this.statusStrip1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
#region CORE-Functions
/*
* SendCommand
*
* Schreibt einen übergebenen String in den Netzwerstream und gibt die Antwort
* Des Servers zurück
*/
string SendCommand(string command)
{
try
{
byte[] send = Encoding.ASCII.GetBytes(command);
str.Write(send, 0, send.Length);
byte[] receive = new byte[4096];
int k = str.Read(receive, 0, receive.Length);
string msg = "";
for (int i = 0; i < k; i++)
{
msg += Convert.ToChar(receive[i]).ToString();
}
return msg;
}
catch (Exception e)
{
toolStripStatusLabel1.Text = e.Message;
return "";
}
}
/*
* Login
*
* Erstellt einen neuen TcpClient und Netzwerkstream mit imap.web.de:143 und
* sendet die Login Daten
*/
string Login()
{
try
{
cl = new TcpClient("imap.web.de", 143);
cl.ReceiveTimeout = 30000;
cl.SendTimeout = 30000;
str = cl.GetStream();
str.ReadTimeout = 45000;
str.WriteTimeout = 45000;
byte[] buffer = new byte[4096];
int k = str.Read(buffer, 0, buffer.Length);
string msg = "";
for (int i = 0; i < k; i++)
{
msg += Convert.ToChar(buffer[i]).ToString();
}
SendCommand("? LOGIN " + user + " " + pass + "\r\n");
return msg;
}
catch (Exception e)
{
toolStripStatusLabel1.Text = e.Message;
return "";
}
}
/*
* GetUnreadIDs
*
* Nach Übergabe eines Ordners wird dieser selectet und nach ungelesenen Nachrichten durchsucht.
* Der zurückgegebene String wird auf die Nummern gekürzt und diese durch ein Split
* in ein int-Array geschrieben welches zurück gegeben wird
*/
int[] GetUnreadIDs(string folder)
{
SendCommand("? SELECT "+folder+"\r\n");
string response = SendCommand("? SEARCH UNSEEN\r\n");
if(response.Length > 34)
{
response = response.Remove(0,9);
response = response.Remove(response.Length-25, 25);
string[] collection = response.Split(' ');
int[] IDs = new int[collection.Length];
if(collection.Length>0)
{
for(int i=0; i<collection.Length; i++)
{
IDs[i] = int.Parse(collection[i]);
}
}
return IDs;
}
return null;
}
/*
* GetFolderList
*
* Hauptfuntion. Nachdem Variablen und Listen zurück gesetzt wurden und der Check-Button
* und das Schließen-MenuItem und -Button deaktiviert wurden, wird ein Login gemacht
* und die Liste Aller Ordner im rot-Verzeichnis abgerufen. Der zurückgegebene String wir
* durch ein Split aufgeteilt und jedes Element des Erzeugtn Arrays in einer Schleife
* bearbeitet. In dieser wird er von unnötigen Teilen befreit und wenn er nicht zu
* unerwünschten Ordnern gehört auf ungelesene Nachrichten überprüft. Existieren solche,
* werden diese durch übergabe des Ordners und sämtlicher ungelesener IDs in diesem
* auf Absender und Betreff untersucht und der MsgDetails Liste hinzugefügt.
* An die Ordnerliste wird die Zahl der neuen Nachrichten in einer Klammer angehängt und
* die Zahl der Gesamtemails um die jemweilige Anzahl erhöht. Diese neue Anzahl wird
* sofort im entsprechenden Label aktualisiert. Egal ob neue emails vorhaneden waren
* oder nicht wird der Ordner der Liste hinzugefügt.
* Nachdem die Schleife abgearbeitet ist, Zeigt ein Balloon Tip (fette Sache!!!)
* im Falle neuer Nachrichten die Anzahl und die Absender in der Taskleiste an.
* Danach wird nur noch der angezeigte Hover Text des Trayicons aktualisiert und
* der Button und das Schließen-MenuItem und -Button wieder aktiviert.
*/
void GetFolderList()
{
neueEmails = 0;
GlobalSenders = "Von: ";
this.Invoke(new SetSchließenToolStripMenuItemEnabledHandler(SetSchließenToolStripMenuItemEnabled), new object[] { false});
this.Invoke(new SetBtnBeendenEnabledHandler(SetBtnBeendenEnabled), new object[] { false });
this.Invoke(new SetBtnCheckNowEnabledHandler(SetBtnCheckNowEnabled), new object[] { false });
this.Invoke(new ClearFolderListHandler(ClearFolderList));
this.Invoke(new ClearMsgDetailsListHandler(ClearMsgDetailsList));
this.Invoke(new SetNotifyIconTextHandler(SetNotifyIconText), new object[] { neueEmails.ToString() + " neue Emails" });
this.Invoke(new SetNeueEmailLabelHandler(SetNeueEmailLabel), new object[] { neueEmails.ToString() });
if (Login() != "")
{
try
{
string list = SendCommand("? LIST \"\" *\r\n");
list = list.Remove(list.Length - 22, 22);
string[] collection = list.Split('\n');
for (int i = 0; i < collection.Length; i++)
{
collection[i] = collection[i].Remove(0, 27);
collection[i] = collection[i].Remove(collection[i].Length - 2, 2);
if (collection[i] != "Unerw&APw-nscht" && collection[i] != "Postausgang" && collection[i] != "Gesendet" && collection[i] != "Papierkorb" && collection[i] != "Entwurf")
{
int[] IDs = GetUnreadIDs(collection[i]);
if (IDs != null)
{
UpdateUnreadMsgDetails(collection[i], IDs);
collection[i] += " (" + IDs.Length.ToString() + ")";
neueEmails += IDs.Length;
this.Invoke(new SetNeueEmailLabelHandler(SetNeueEmailLabel), new object[] { neueEmails.ToString() });
}
this.Invoke(new AddFolderListItemHandler(AddFolderListItem), new object[] { collection[i] });
}
}
if (neueEmails > 0)
{
notifyIcon1.ShowBalloonTip(1000, neueEmails.ToString() + " neue Emails", GlobalSenders, ToolTipIcon.Info);
}
this.Invoke(new SetNotifyIconTextHandler(SetNotifyIconText), new object[] { neueEmails.ToString() + " neue Emails" });
Logout();
}
catch (Exception e)
{
toolStripStatusLabel1.Text = e.Message;
}
}
this.Invoke(new SetBtnCheckNowEnabledHandler(SetBtnCheckNowEnabled), new object[] { true });
this.Invoke(new SetSchließenToolStripMenuItemEnabledHandler(SetSchließenToolStripMenuItemEnabled), new object[] { true });
this.Invoke(new SetBtnBeendenEnabledHandler(SetBtnBeendenEnabled), new object[] { true });
}
/*
* UpdateUnreadMsgDetails
*
* Nachdem ein neuer Überpunkt in der MsgDetails Liste mit dem entsprechenden Ordner als Überschrift angelegt
* wurde, wird der übergebene Ordner auf dem Server selectet und eine schleife arbeitet alle
* durch ein int-Array als ungelesen übergebenen Emails ab. Dabei werden die von FETCH zurück
* gegebenen Strings für SENDER und SUBJECT durch eine Regular Expression von ihrem Drumherum
* befreit und nachdem das getan ist die Email wieder auf ungelesen gesetzt.
* Die MsgDetails Liste wird um den entsprechenden Eintrag mit Absender und Betreff erweitert und
* die Liste mit allen Absendern um den entsprechenden string erweitert.
*/
void UpdateUnreadMsgDetails(string folder, int[] IDs)
{
this.Invoke(new AddMsgDetailsListItemHandler(AddMsgDetailsListItem), new object[] { "Neu in Ordner: " + folder });
SendCommand("? SELECT " + folder + "\r\n");
for(int i = 0; i<IDs.Length; i++)
{
string sender = SendCommand("? FETCH "+IDs[i]+" (FLAGS BODY[HEADER.FIELDS (SENDER)])\r\n");
Regex re1 = new Regex("Sender: (?<sender>[^\n\r]+)", RegexOptions.IgnoreCase);
Match m1 = re1.Match(sender);
sender = m1.Groups["sender"].Value;
string subject = SendCommand("? FETCH "+IDs[i]+" (FLAGS BODY[HEADER.FIELDS (SUBJECT)])\r\n");
Regex re2 = new Regex("Subject: (?<subject>[^\n\r]+)", RegexOptions.IgnoreCase);
Match m2 = re2.Match(subject);
subject = m2.Groups["subject"].Value;
SendCommand("? STORE "+IDs[i]+" -FLAGS (\\SEEN)\r\n");
this.Invoke(new AddMsgDetailsListItemHandler(AddMsgDetailsListItem), new object[] { " > "+sender + " - " + subject});
GlobalSenders += sender + " ";
}
}
/*
* Logout
*
* Ein LOGOUT wird gesendet und danach der Stream und der TcpClient geschlossen.
*/
void Logout()
{
SendCommand("? LOGOUT\r\n");
str.Close();
cl.Close();
}
#endregion
#region delgates
void AddFolderListItem(string text)
{
lbFolders.Items.Add(text);
}
void AddMsgDetailsListItem(string text)
{
lbMsgDetails.Items.Add(text);
}
void ClearFolderList()
{
lbFolders.Items.Clear();
}
void ClearMsgDetailsList()
{
lbMsgDetails.Items.Clear();
}
void SetNeueEmailLabel(string text)
{
lNeueEmails.Text = "Neue Emails: " + text;
}
void SetNotifyIconText(string text)
{
notifyIcon1.Text = text;
}
void SetBtnCheckNowEnabled(bool enabled)
{
btnCheckNow.Enabled = enabled;
}
void SetSchließenToolStripMenuItemEnabled(bool enabled)
{
BeendenToolStripMenuItem.Enabled = enabled;
}
void SetBtnBeendenEnabled(bool enabled)
{
btnBeenden.Enabled = enabled;
}
#endregion
#region form events
/*
* BtnCheckNowClick
*
* Benutzername und Passwort werden aus den Textboxen geholt und ein neuer Thread
* für das aktualisieren gestartet, wenn der Button nicht deaktiviert sein sollte,
* was nur der Fall ist, wenn schon eine Überprüfung läuft.
*/
void BtnCheckNowClick(object sender, EventArgs e)
{
user = tbUser.Text;
pass = tbPass.Text;
if (btnCheckNow.Enabled)
{
Thread t = new Thread(new ThreadStart(GetFolderList));
t.Start();
}
}
/*
* timer1_Tick
*
* wird bei jedem Tick von timer1 ausgeführt - wie BtnCheckNowClick
*/
private void timer1_Tick(object sender, EventArgs e)
{
user = tbUser.Text;
pass = tbPass.Text;
if (btnCheckNow.Enabled)
{
t = new Thread(new ThreadStart(GetFolderList));
t.Start();
}
}
/*
* BtnOKClick
*
* Die Anwendung wird in das TrayIcon minimiert
*/
void BtnOKClick(object sender, System.EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
this.Visible = false;
}
/*
* cbAutoCheck_CheckedChanged
*
* je nachdem ob checked oder nicht wird die IntervallNumericUpDown zusammen
* mit dem Timer an und aus gestellt wenn sich checked ändert.
*/
private void cbAutoCheck_CheckedChanged(object sender, EventArgs e)
{
nUDIntervall.Enabled = cbAutoCheck.Checked;
timer1.Enabled = cbAutoCheck.Checked;
}
/*
* nUDIntervall_ValueChanged
*
* Wird der Wert des numericUPDown gändert so wird dieser von Minuten in Millisekunden
* umgerechnet sofort in den Interval Wert von timer1 übertragen
*/
private void nUDIntervall_ValueChanged(object sender, EventArgs e)
{
timer1.Interval = Convert.ToInt32(nUDIntervall.Value) * 60000;
}
/*
* btnBeenden_Click
*
* Beendet das Programm
*/
private void btnBeenden_Click(object sender, EventArgs e)
{
this.Close();
}
#region notifyIcon related
/*
* notifyIcon1_DoubleClick
*
* Holt das Programm egal aus welchem WindowState in den Vordergrund
*/
private void notifyIcon1_DoubleClick(object sender, EventArgs e)
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
this.BringToFront();
}
/*
* minimierenToolStripMenuItem_Click
*
* Überprüft den WindowState und ändert diesen zusammen mit der Sichtbarkeit
* und dem ToolStripMenuItem-Text dementsprechend
*/
private void minimierenToolStripMenuItem_Click(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
{
this.WindowState = FormWindowState.Minimized;
this.Visible = false;
this.minimierenToolStripMenuItem.Text = "Wiederherstellen";
}
else
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
this.minimierenToolStripMenuItem.Text = "Minimieren";
}
}
/*
* tothefrontToolStripMenuItem_Click
*
* Holt das Programm egal aus welchem WindowState in den Vordergrund
*/
private void tothefrontToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
this.BringToFront();
}
/*
* ÜberToolStripMenuItem_Click
*
* Öffnet den Über... Dialog
*/
private void ÜberToolStripMenuItem_Click(object sender, EventArgs e)
{
Über über = new Über();
über.ShowDialog();
}
/*
* toolStripMenuItem1_Click
*
* Beendet das Programm
*/
private void BeendenToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
#endregion
/*
* CheckMail_FormClosed
*
* Wenn die Form geschlossen ist
*/
private void CheckMail_FormClosed(object sender, FormClosedEventArgs e)
{
notifyIcon1.Dispose();
if (str != null)
{
str.Close();
}
if (cl != null)
{
cl.Close();
}
}
/*
* CheckMail_FormClosing
*
* Bevor die Form geschlossen ist. Speichert Benutzerdaten.
*/
private void CheckMail_FormClosing(object sender, FormClosingEventArgs e)
{
if (t != null)
{
t.Abort();
}
sett.user = tbUser.Text;
sett.pass = tbPass.Text;
sett.Save();
}
/*
* Damit kein automatisches Checken erfolgt, während Werte geändert werden
*/
private void tbUser_TextChanged(object sender, EventArgs e)
{
cbAutoCheck.Checked = false;
}
private void tbPass_TextChanged(object sender, EventArgs e)
{
cbAutoCheck.Checked = false;
}
#endregion
}
}