Introduction
This article aims at demonstrating creation of a system tray application ,
which uses a context menu. This article also explains creation of processes and
handling XML Data (reading and writing ).
Why Desktop Mail Checker ?
Let me confess some thing guys !!! I have a trash of mails jumping in to me
almost all of the 24 hours. I act a little bit frenzied about checking mails. I
check my mails and recheck and I keep doing that over and over. I felt keeping
my mail client opened was annoying and I wanted to do something to overcome
this.
I wanted to write an application that sits over your system tray and
convenient enough to check mails easily without hassles. Another thing was , I
wanted to write an system tray application , and wanted to create process at run
time, and Viola !! I posted this article.
The application has two classes - the DesktopMailChecker
and
mailDomain
classes.
The
DesktopMailChecker
class has a
notifyicon
control . Icons in the status area are short cuts to processes that are
running in the background of a computer, such as a virus protection program or a
volume control. These processes do not come with their own user interfaces.
NotifyIcon
provides a way to program in this functionality. Icon
defines the icon that appears in the status area. Pop-up menus for an icon are
addressed with
ContextMenu
and context menu
control .
The
ContextMenu
class represents shortcut menus that can be
displayed when the user clicks the right mouse button over a control or area of
the form.
This class also initiates the creation of a process using the Process
class.
The MailDomain
class has checkbox controls to receive the user
options and the results are updated in an XML File. XMLTextReader
and XMLTextWriter
are used to read and write XML data in the
application.
Things to remember before creating a system tray application.....
- Include a
NotifyIcon
class into the project.
- Use a
ContextMenu
class to provide a menu to the
NotifyIcon
class
- Create a icon or use an icon to the
NotifyIcon.Icon
The code and illustrations are given below.
The DesktopMailChecker
class contains code to create process.
private void menuItem4_Click(object sender, System.EventArgs e)
{
MessageBox.Show("Checking Mails","Message");
Process myProcess = new Process();
ProcessStartInfo myProcessStartInfo =
new ProcessStartInfo("outlook.exe");
myProcess.StartInfo = myProcessStartInfo;
myProcess.Start();
createProc();
}
This is another method that creates web browsers in case you wanna check
mails through your browser interface..
private void createIEProc(String site)
{
Process myProcess = new Process();
ProcessStartInfo myProcessStartInfo =
new ProcessStartInfo("iexplore.exe",site);
myProcess.StartInfo = myProcessStartInfo;
myProcess.Start();
}
The Methods in the MailDomain
class stores the user response ,
options of the mail provider sites to open. Here is a sample code
illustrating reading and writing XML Data into a file and from a file. This how
xml files are read.
private void MailDomain_Load(object sender, System.EventArgs e)
{
XmlTextReader reader = new XmlTextReader ("maillist.xml");
String list ="";
if(!reader.EOF)
{
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
while (reader.MoveToNextAttribute())
{
MessageBox.Show(reader.Value);
list=reader.Value+","+list;
}
break;
case XmlNodeType.DocumentType:
break;
default:
break;
}
}
.......
reader.Close();
}
else
{
}
}
This piece of code demonstrates writing into XML Files.
private void updateXMLdoc()
{
String []tok;
tok = textBox1.Text.Split(',');
if(textBox1.Text!="")
{
XmlTextWriter xtw= new XmlTextWriter ("maillist.xml", null);
xtw.Formatting = Formatting.Indented;
xtw.WriteStartDocument(false);
xtw.WriteDocType("maildomain", null, null, null);
xtw.WriteComment("This file represents the mail sites the user uses");
xtw.WriteStartElement("Data");
for(int i=0;i<tok.Length;i++)
{
xtw.WriteStartElement("site", tok[i]);
xtw.WriteEndElement();
}
xtw.WriteEndElement();
xtw.Flush();
xtw.Close();
}
}
Update
I added faculties to send emails
using outlook from the present version. It uses the outlook client and it
requires to interop the outlook dll. Use
tlbimp.exe to convert the
msoutl9.olb and covert into a .dll. Include the reference in to the project. The
following code performs sending e mails via Outlook.
try
{
oApp = new Outlook.Application();
oNameSpace= oApp.GetNamespace("MAPI");
oNameSpace.Logon(null,null,true,true);
oOutboxFolder = oNameSpace.GetDefaultFolder(
Outlook.OlDefaultFolders.olFolderOutbox);
Outlook._MailItem oMailItem = (Outlook._MailItem)oApp.CreateItem(
Outlook.OlItemType.olMailItem);
oMailItem.To = textBox1.Text;
oMailItem.Subject = textBox2.Text;
oMailItem.Body = textBox3.Text;
oMailItem.SaveSentMessageFolder = oOutboxFolder;
oMailItem.Save();
oMailItem.Send();
if(oMailItem.Sent || oOutboxFolder.UnReadItemCount!=0)
oOutboxFolder.MoveTo(oNameSpace.GetDefaultFolder(
Outlook.OlDefaultFolders.olFolderSentMail));
this.Close();
}
catch
{
this.Dispose();
}
Conclusion
This article explains the creation of process, use
processinfo and create process specified by name or
sysID
.
This article demonstrates the creation of a system tray application. This
application also demonstrates the reading and writing of XML Data . This
application demonstrates using
MSOutlook
to send mails.