快讯
- 装机圈新宠儿,微星 MAG B850M MORTAR Wi-Fi迫击炮主板评测
- 微星MPG Z890I EDGE TI WIFI 刀锋 钛评测:14 层 PCB 加持,同级之中强无敌!
- 打造低调而卓越的Ai PC,微星MEG Z890 ACE战神主板开箱
- 解密“星”制造,微星深圳恩斯迈工厂探秘之旅
- 游泳也需音乐相伴!韶音OpenSwim Pro评测
- 又一款轻量化电竞
- 元气满满的充电之旅!铂陆帝商超活动嗨翻周末
- 雷柏机甲编码主题系列警戒线S-07图赏:以机械美感诠释潮流新理念桌搭!
- 更适合新手体质的枪战游戏,《无畏契约》开战!
- 现代与传统的融合之旅:贝尔金笔记本扩展坞体验
- 航天品质下的极速充电体验——航嘉G65 GaN快速充电器评测
- 有颜有实力的外设谁能不爱?来看雷柏商超巡演
- 新潮外设引爆全场!雷柏联合PC打造潮品酷玩趴
- 幻彩绚丽,玩趣十足!雷柏V700DIY键盘图赏
- U皇就该配板皇,超频玩家现身说法教你选主板
- 13代酷睿的超频利器,有好板才有好性能
- 全新升级,雷柏V20S RGB光学游戏鼠标2023版详解
- 马斯克30亿放“烟花”,民航故事为何值钱?
- 让露营生活更精致!铂陆帝户外电源AC180评测
- 惠威音响体验:音响中的艺术品,拥有好听的灵魂
- 装机圈新宠儿,微星 MAG B850M MORTAR WiFi迫击炮主板评测31日
- 微星MPG Z890I EDGE TI WIFI 刀锋 钛评测:14 层 PCB 加持,同级之中强无敌!29日
- 打造低调而卓越的Ai PC,微星MEG Z890 ACE战神主板开箱10日
- 解密“星”制造,微星深圳恩斯迈工厂探秘之旅02日
- 游泳也需要音乐相伴!韶音新一代游泳耳机OpenSwim Pro评测12日
- 又一款轻量化电竞"神鼠"来袭!玄熊猫3395游戏鼠标今晚首发149元10日
- 元气满满的充电之旅!铂陆帝商超活动嗨翻周末27日
- 雷柏机甲编码主题系列警戒线S-07图赏:以机械美感诠释潮流新理念桌搭!24日
- 更适合新手体质的枪战游戏,《无畏契约》国服正式开战!20日
- 玩物近话论:现代科技与甘南秘境的融合之旅 贝尔金笔记本扩展坞体验14日
- 航天品质下的极速充电体验——航嘉G65 GaN快速充电器评测12日
- 有颜有实力的外设好物谁能不爱?雷柏点燃PCGROUP潮品商超巡演15日
- 新潮外设好物引爆全场!雷柏联合PCGROUP打造潮品酷玩趴15日
- 幻彩绚丽,玩趣十足!雷柏V700DIY热插拔机械键盘图赏10日
- U皇就该配板皇,超频玩家现身说法教你选主板26日
- 13代酷睿的超频利器,有好板才有好性能25日
- 全新升级 经典复刻 雷柏V20S RGB光学游戏鼠标2023版详解25日
- 马斯克30亿放“烟花”,民航故事为何值钱?23日
- 告别电量焦虑,让露营生活多一分精致!铂陆帝户外电源AC180开箱评测17日
- 惠威音响体验:音响中的艺术品,拥有好听的灵魂04日
用C#做个带精灵的邮件通知程序
2004-02-14 09:34 出处:eNet硅谷动力 作者:王凯明 责任编辑:pjl
1回顶部 Visual C#是微软公司推出的下一代程序开发语言,是微软.Net框架中的的一个重要组成部分。微软的.Net平台堪称为新一代的互联网平台。对于技术开发人员来说,.Net平台的两大特性是非常卓越的,首先是其所提供的公共语言运行时,也就是公用语言运行平台,另一方面就是其庞大而全面的统一编程类。Visual C#就是通过调用这些类、对象来实现许多比较强大的功能。
在互联网应用中,电子邮件一直占据着重要的位置。互联网上每天都有大量的电子邮件,我们每天都要花时间去收发邮件,而有时却收不到一封邮件,有时却很多。要是我们能做一个邮件通知程序就好了。本文就向大家介绍用C#做个邮件通知程序,同时也向大家展示一下C#编程的一些特性。
一. 简介:
这个邮件通知程序是一个用来通知用户的邮件服务器中是否有新邮件的TCP/IP程序。程序还带有一个精灵来通知用户具体的新邮件数,所以用户界面比较新奇。程序每隔5分钟就自动连接到邮件服务器进行新邮件的检查。用户还可以对程序进行配置:设置时间间隔,设置邮件服务器地址以及端口号,设置用户名以及密码。此程序还是居于系统托盘的,所以是在后台运行的。
二. 工程步骤:
1. 在VS.net下新建一个C#的Windows应用程序的工程,不妨命名为“EmailNotifier”。
![]() 2回顶部
2. 设计主界面和精灵界面:
先将主窗体的ShowInTaskbar属性设置为false,FormBorderStyle属性设置为FixedDialog,Text属性设置为“配置参数”。
再在主窗体上添加五个标签控件(Label Control)、五个文本框控件(TextBox Control)、两个按钮控件(Button Control)、一个系统托盘控件(NotifyIcon Control)、一个上下文菜单控件(ContextMenu Control)以及一个时钟控件(Timer Control)。
对各个控件进行属性设置:将五个标签的Text属性分别设置为“邮件服务器地址:”、“服务器端口:”、“用户名:”、“密码:”、“时间间隔(毫秒):”;将五个文本框的Name属性分别设置为:“ServerAdd”、“ServerPort”、“Username”、“Password”、“TimeSpan”;将前四个文本框的Text属性均设置为空,将最后一个的设置为300000(因为我们默认的时间间隔为5分钟);还有把第四个文本框的PasswordChar属性设置为“*”,这样输入的时候就隐藏了密码;把按钮控件的Text属性设置为“隐藏”和“检查邮件”;将系统托盘的Icon属性设置为一个图标文件;在上下文菜单下添加三个子项“配置参数”、“检查邮件”、“退出”。
这样主界面已经设计完毕,图示如下:
![]() ![]() ![]() 3回顶部
3. 重要的代码部分:
在主窗体的代码部分,因为我们要用到网络以及网络流等类的对象,所以首先得添加以下几个重要的名字空间(Namespace):
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;
接着,给我们的类添加一个NetworkStream对象来控制网络中的流。
private NetworkStream netStream;
给该类的构造函数添加如下代码,设置时钟的时间间隔以及使程序一开始就不可见而只有系统托盘。
timer1.Interval=Int32.Parse(TimeSpan.Text);//设定时间间隔
this.Opacity=0;//使窗体不可见
我们用到一个重要的函数EmailCheck()。这个函数先新建一个TcpClient对象进行网络连接,用一个try-catch设法连接到用户输入的邮件服务器。如果连接成功,则用netStream对象取得网络流:netStream = tcpClient.GetStream();最后完成信息的发送和获取。函数如下:
private void EmailCheck()
{
//新建一个TcpClient对象来建立连接
TcpClient tcpClient = new TcpClient();
try
{
tcpClient.Connect(ServerAdd.Text,Int32.Parse(ServerPort.Text));
}
catch
{
MessageBox.Show("不能连接到主机:"+ServerAdd.Text+"和端口:"+ServerPort.Text);
}
//从邮件服务器获得相应
netStream = tcpClient.GetStream();
if(netStream == null)
{
throw new Exception("获得的网络流为空值。");
}
string returnMsg=ReadFromNetStream(ref netStream);
checkForError(returnMsg);
//发送用户名信息
WriteToNetStream(ref netStream, "USER " + this.Username.Text);
returnMsg=ReadFromNetStream(ref netStream);
checkForError(returnMsg);
//发送密码信息
WriteToNetStream(ref netStream, "PASS " + this.Password.Text);
returnMsg=ReadFromNetStream(ref netStream);
checkForError(returnMsg);
Stat();
netStream.Close();
tcpClient.Close();
}
4回顶部
上面的函数中用到了ReadFromNetStream()、WriteToNetStream()、Stat()、checkForError()等函数。ReadFromNetStream()是用来从网络流中读取信息的,带一个类型为ref NetworkStream的参数;WriteToNetStream()是向网络流中写入信息的,带两个类型为ref NetworkStream,string的参数;Stat()是当检查到新邮件后用来向用户报告信息的函数;checkForError()是进行查错的,带一个String类型的参数。四个函数如下:
///
/// 这个函数用来显示新邮件数信息
///
public void Stat()
{
WriteToNetStream(ref netStream, "STAT");
string returnMsg=ReadFromNetStream(ref netStream);
checkForError(returnMsg);
//将总邮件数和邮件大小分离
string[] TotalStat= returnMsg.Split(new char[] {' '});
int count =Int32.Parse(TotalStat[1]);
int totalSize=Int32.Parse(TotalStat[2]);
//调用精灵,告知用户新邮件数
Form2 agent= new Form2(count);
}
///
/// 这个函数用来向网络流写入数据
///
///
///
private void WriteToNetStream(ref NetworkStream NetStream, string Command)
{
string stringToSend = Command + "\r\n";
Byte[] arrayToSend = Encoding.ASCII.GetBytes(stringToSend.ToCharArray());
NetStream.Write(arrayToSend, 0, arrayToSend.Length);
}
///
/// 这个函数用来从网络流中读取数据
///
///
///
private String ReadFromNetStream(ref NetworkStream NetStream)
{
StringBuilder strReceived= new StringBuilder();
StreamReader sr= new StreamReader(NetStream);
String strLine = sr.ReadLine();
while(strLine==null || strLine.Length==0)
{
strLine = sr.ReadLine();
}
strReceived.Append(strLine);
if(sr.Peek()!=-1)
{
while ((strLine=sr.ReadLine())!=null)
{
strReceived.Append(strLine);
}
}
return strReceived.ToString();
}
///
/// 这个函数用来检测网络流中的错误
///
///
private void checkForError(String strMessage)
{
if (strMessage.IndexOf("+OK") == -1)
throw new Exception("ERROR - . Recieved: " + strMessage);
}
对于主窗体,我们还要添加各类事件处理函数,这样程序就可以工作了。各函数如下:
private void menuItem1_Click(object sender, System.EventArgs e)
{
this.Opacity=100;//使窗体可见
}
private void menuItem2_Click(object sender, System.EventArgs e)
{
this.EmailCheck();//检查是否有新邮件
}
private void menuItem3_Click(object sender, System.EventArgs e)
{
this.Close();//退出程序
}
private void button1_Click(object sender, System.EventArgs e)
{
this.Opacity=0;//使窗体不可见
}
private void button2_Click(object sender, System.EventArgs e)
{
this.EmailCheck();//检查是否有新邮件
}
private void timer1_Tick(object sender, System.EventArgs e)
{
this.EmailCheck();//检查是否有新邮件
}
5回顶部
在新建窗体的代码部分,主要是导入精灵并运用精灵向用户报告新邮件数等的处理问题。程序中,只要修改该类的构造函数即可:
public Form2(int EmailNumber)
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add anyconstructor code after InitializeComponent call
//
//你可以从下面的地址下载
//http://www.microsoft.com/msagent/downloads.htm
//
axAgent1.Characters.Load("Genie","Genie.acs");//导入精灵吉尼(Genie)
AgentObjects.IAgentCtlCharacterEx genie=axAgent1.Characters["Genie"];
//genie的语言ID =1033,为英语
genie.Show(false);
genie.Speak("You Have "+ EmailNumber.ToString()+" emails","");
genie.Think("Should I Leave or Stay, Himmm!!!!");
genie.Hide(true);
}
注意:genie的语言ID为1033,对应于英语,现在还不支持中文。
4. 程序的运行测试:
运行程序后,配置参数界面如下:
![]() ![]() |
最热搜索
无线路由器怎么用 会说话的汤姆猫电脑版 12306网上订火车票 跳舞吧 flash player 下载 PP助手电脑版 Adobe Reader(pdf阅读) iOS6正式版12项新功能 QQ空间克隆器 9158视频KTV 植物大战僵尸辅助工具 Win8怎么关机 QQ空间进不去 2013年春节是几月几号 QQ昵称 QQ空间皮肤 PPT模板 电脑输入法不见了怎么办 2012中秋节是几月几日 word安全模式 qq输入法怎么点亮 IE修复 感恩节是几月几日 CSS布局 PS快捷键 Outlook设置 声卡驱动器官方免费下载 格式工厂怎么用 桌面图标有阴影怎么去掉 Windows RT是什么意思 2013年日历设计 Word打不开怎么办 Win8专区 腾讯微云网 windows8激活工具 剑灵什么时候公测 QQ通讯录怎么用 开心斗地主 拖拉机小游戏 麻将游戏 中国象棋 德州扑克 黄金矿工中文版 保皇扑克游戏 四国军棋 万圣节是几月几日 ps抠图教程 12306订票助手 万圣节小游戏大全 rar文件怎么打开 Photoshop CS6教程 iOS6完美越狱 QQ个性签名