河北工程大学科信学院
课程设计说明书
(2009/2010学年第二学期)
课程名称 : C#程序设计 题 目 : 电子邮件客户端发送功能的实现 专业班级 : 通信工程06-1 **** : *** 学 号: ********* 指导教师 : 马小进 陈湘国 崔冬 赵欣 设计周数 : 2周
设计成绩 :
2010年6月7日
2
电子邮件客户端
1.课程设计目的及任务要求 ....................................................................................................................... 1
1.1 课程设计目的 ............................................................................................................................... 1 1.2 原始数据及主要任务: ............................................................................................................... 1 1.3课程设计的内容及要求 ................................................................................................................ 1 2. 课程设计正文 ......................................................................................................................................... 2
2.1电子邮件 ........................................................................................................................................ 2 2.2 POP3协议 ...................................................................................................................................... 2 2.3 SMTP协议 ...................................................................................................................................... 2 2.4电子邮件客户端系统总体结构 .................................................................................................... 3 2.5 数据库表说明 ............................................................................................................................... 3 3.邮箱主要功能 ........................................................................................................................................... 4
3.1 邮箱配置 ....................................................................................................................................... 4 3.2 发送邮件 ....................................................................................................................................... 5 3.3新建邮箱账户 ................................................................................................................................ 8 3.4编辑邮箱 ........................................................................................................................................ 9 3.5添加好友 ...................................................................................................................................... 10 3.6编辑好友 ...................................................................................................................................... 11 4.课程设计总结 ......................................................................................................................................... 12 5.参考文献 ................................................................................................................................................. 13
1
电子邮件客户端
1.课程设计目的及任务要求
1.1 课程设计目的
本课程设计是通信工程专业的一门软件实践专业基础课,旨在提高学生的软件编程能力。本设计将进一步加强学生对面向对象程序设计思想的理解,增强对C#程序语言的灵活运用。要求学生能结合数据库知识,网络通信技术,实现基本的应用软件,为以后从事相关行业打下软件编程基础。
1.2 原始数据及主要任务:
1、分析与设计:对常见的电子邮件客户端软件(如Outlook、Foxmail)进行分析,熟悉设计任务,确定系统设计目标;
2、熟练掌握数据库的基本操作:包括数据库、表的建立,数据库的连接,数据的添加、删除、修改等;
3、深入学习System.Net.Mail 命名空间及其使用,掌握邮件发送功能的实现; 4、系统实现:根据技术要求,实现系统功能,完成系统联调及测试等工作; 5、课设报告:按照书写格式要求,完成报告书写。
1.3课程设计的内容及要求
设计一个电子邮件客户端,实现邮件发送和好友管理的功能。具体要求: 1、系统功能采用Windows 窗体实现; 2、系统面向单个用户设计;
3、用户可以管理自己的多个邮箱,每一次邮件发送可以选择邮箱; 4、用户可以管理自己的地址簿; 5、用户可以编辑、暂存、发送电子邮件。
第 1 页
电子邮件客户端
2. 课程设计正文
2.1电子邮件
电子邮件(简称E-mai1)又称电子信箱、电子邮政,它是—种用电子手段提供信息交换的通信方式。它是全球多种网络上使用最普遍的一项服务。这种非交互式的通信,加速了信息的交流及数据传送,它是—个简易、快速的方法。通过连接全世界的Internet,实现各类信号的传送、接收、存贮等处理,将邮件送到世界的各个角落。到目前为止,可以说电子邮件是Internet资源使用最多的一种服务,E-mai1不只局限于信件的传递,还可用来传递文件、声音及图形、图像等不同类型的信息。例如比较著名的邮件收发软件有系统自带的OutLook,还有比较著名的第三方软件FoxMaiL等等。 2.2 POP3协议
POP是Post Office Protocol的缩写,而POP3则为POP的版本3,该协议用于电子邮件的接收,其默认端口是110。POP3客户端向POP3服务器发送命令并等待响应,POP3命令采用命令行形式,用ASCII码表示,以〈CRLF〉结束。服务器响应是由一个单独的命令行组成, 响应的第一行以ASCII文本“+OK”或“-ERR”指出相应的操作状态是成功还是失败。 2.3 SMTP协议
SMTP是Simple Mail Transfer Protocol的缩写,他是一个定义邮件传输的协议。他是基于TCP服务的应用层协议,有由RFC0821所定义,使用的默认端口是25。SMTP是个请求/响应协议,命令和响应都是基于ASCII文本,并以CR和LF符结束,响应包括一个表示返回状态的三位数字应答码。
第 2 页
电子邮件客户端
2.4电子邮件客户端系统总体结构
登陆窗口 主界面 文件 帮助 好友管理 写邮件 新建账户 编辑账户 发件箱 退出 添加好友 添加好友 编辑好友 地址薄 图1: 电子邮件客户端系统总体结构图
2.5 数据库表说明
表1:好友管理表(friendsInfo)
列名 name Email tel 数据类型 nvarchar nvarchar char 长度 10 20 11 是否为主键 否 是 否 是否为空 否 否 是 注释 姓名 E-mail 电话
表2:添加好友表(friendsAdd)
列名 emailID 数据类型 nvarchar 长度 20 是否为主键 是 是否为空 否 注释 邮箱 账号 password nvarchar 20 否 否 密码
第 3 页
电子邮件客户端
表3:发件箱(sendBox)
列名 sender receiver subject body Account
数据类型 nvarchar nvarchar nvarchar ntext int 长度 20 20 50 是否为主键 否 否 否 否 否 是否为空 否 否 否 否 否 注释 发送者 接收者 主题 正文 帐户 3.邮箱主要功能
3.1 邮箱配置
在写邮件之前必须先进行配置相应的邮件服务器。发送邮件服务器(SMTP)处填写:smtp.qq.com来设置发送服务器。
图2:邮箱配置
主要代码:
第 4 页
电子邮件客户端 public delegate void SetMyListBox(string mylistvalue); public delegate string GetMyMessage();
public partial class Form1 : Form {
public string smtpserver=\"\"; public string pop3server=\"\"; public string name=\"\"; public string password=\"\";
public Form1() {
InitializeComponent(); }
private void Form1_Load_1(object sender, EventArgs e) {
// TODO: 这行代码将数据加载到表“emailInfoDataSet2._new”中。您可以根据需要移动或移除它。 //this.newTableAdapter1.Fill(this.emailInfoDataSet2._new);
// TODO: 这行代码将数据加载到表“emailInfoDataSet1._new”中。您可以根据需要移动或移除它。 this.newTableAdapter.Fill(this.emailInfoDataSet1._new); }
3.2 发送邮件
用户在填写地址的时候务必注意准确填写,否则发送将失败。因为软件需要联网操作,如遇到网络环境不好可能也会显示发送失败,在这情况下用户可以尝试重新发送并且多试几次,如果还不行那可以等到网络稍好一点再进行尝试
第 5 页
电子邮件客户端
图3: 发送邮件
主要代码:
public void Send() {
MethodInvoker dgMyBtnTrue = new MethodInvoker(SetButtonture); MethodInvoker dgMyBtnFalse = new MethodInvoker(SetButtonfalse); dgMyListBox = new SetMyListBox(SetListBox);
BeginInvoke(dgMyBtnFalse);
statelistBox.Invoke(dgMyListBox, new object[] { \"正在连接服务器。。。\" }); mySendMail.Login();
statelistBox.Invoke(dgMyListBox, new object[] { \"正在发送。。。\" }); mySendMail.SendMails(); BeginInvoke(dgMyBtnTrue); }
private void frmSendMail_Load(object sender, EventArgs e) {
第 6 页
电子邮件客户端 // TODO: 这行代码将数据加载到表“emailInfoDataSet3.friendsInfo”中。您可以根据需要移动或移除它。
this.friendsInfoTableAdapter.Fill(this.emailInfoDataSet3.friendsInfo);
// TODO: 这行代码将数据加载到表“emailInfoDataSet._new”中。您可以根据需要移动或移除它。 this.newTableAdapter.Fill(this.emailInfoDataSet._new);
} }
public class SMail {
private string smtpServer; private string name; private string password; private string filepath = \"\"; private string[] msgUn; SmtpClient client ; MailMessage message;
public SMail(string ss, string na, string pass) {
smtpServer = ss; name = na; password = pass; }
public void Login() {
client = new SmtpClient(smtpServer);
MailAddress from = new MailAddress(msgUn[0], msgUn[3], System.Text.Encoding.Default); MailAddress to = new MailAddress(msgUn[1]); message = new MailMessage(from, to); filepath = msgUn[4];
if (\"\" != filepath) {
Attachment mailAttach = new Attachment(filepath, MediaTypeNames.Application.Octet); ContentDisposition fileDis = mailAttach.ContentDisposition; fileDis.CreationDate = System.IO.File.GetCreationTime(filepath); fileDis.ModificationDate = System.IO.File.GetLastWriteTime(filepath); fileDis.ReadDate = System.IO.File.GetLastAccessTime(filepath); message.Attachments.Add(mailAttach); }
第 7 页
电子邮件客户端
message.Body = msgUn[5];
message.BodyEncoding = System.Text.Encoding.Default; message.Subject = msgUn[2];
message.SubjectEncoding = System.Text.Encoding.Default;
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential(name, password); client.DeliveryMethod = SmtpDeliveryMethod.Network; }
3.3新建邮箱账户
用户在这里可以添加账号密码,系统将为用户保存,方便用户使用
图4:编辑邮箱
主要程序:
public frmAddEmail() {
InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) {
SqlConnection conn = new SqlConnection(OperateDB.ConnString); conn.Open();
string sql = \"INSERT INTO new VALUES('\" + textBox1.Text.Trim() + \"','\" + textBox2.Text.Trim() + \"')\"; SqlCommand cmd = new SqlCommand(sql, conn); if (cmd.ExecuteNonQuery() == 1) {
MessageBox.Show(\"添加成功!\", \"提示\", MessageBoxButtons.OK, MessageBoxIcon.Information);
第 8 页
电子邮件客户端 } else {
MessageBox.Show(\"出错啦,添加失败!\", \"提示\", MessageBoxButtons.OK, MessageBoxIcon.Error); }
conn.Close(); }
3.4编辑邮箱
用户在这里可以编辑已经添加的邮箱或者删除邮箱。
图5:编辑邮箱
主要代码:
public partial class frmEditEmail : Form {
public frmEditEmail() {
InitializeComponent(); }
SqlDataAdapter da = new SqlDataAdapter(); DataSet ds = new DataSet();
///
string sql = \"select emailID as 账号,password as 密码from new\"; SqlConnection conn = new SqlConnection(OperateDB.ConnString);
第 9 页
电子邮件客户端 conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn); da.SelectCommand = cmd; da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0]; conn.Close(); }
private void button2_Click(object sender, EventArgs e) {
SqlCommandBuilder cb = new SqlCommandBuilder(da); da.Update(ds);
MessageBox.Show(\"修改成功!\"); }
private void frmEditEmail_Load(object sender, EventArgs e) {
BindData(); }
3.5添加好友
在这里用户可以添加自己的好友姓名、Email、电话号码,系统将为用户保存,方便用户使用
图6:添加好友
主要程序:
public frmFrdAdd() {
InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) {
SqlConnection conn = new SqlConnection(OperateDB.ConnString);
第 10 页
电子邮件客户端 conn.Open();
string sql = \"INSERT INTO friendsInfo VALUES('\" + textBox1.Text.Trim() + \"','\" + textBox2.Text.Trim() + \"','\" + textBox3.Text.Trim() + \"')\"; SqlCommand cmd = new SqlCommand(sql, conn); if (cmd.ExecuteNonQuery() == 1) {
MessageBox.Show(\"添加成功!\", \"提示\", MessageBoxButtons.OK, MessageBoxIcon.Information); } else {
MessageBox.Show(\"出错啦,添加失败!\", \"提示\", MessageBoxButtons.OK, MessageBoxIcon.Error); }
conn.Close(); }
3.6编辑好友
在这个功能里,为用户提供了一个可视化好友编辑界面,用户可以根据需要随 时更新好友信息。
图7:编辑好友
主要代码:
private void frmEdit_Load(object sender, EventArgs e) {
BindData(); }
SqlDataAdapter da = new SqlDataAdapter(); DataSet ds = new DataSet();
第 11 页
电子邮件客户端
///
string sql = \"select name as 姓名,email as Email,Tel as 电话from friendsInfo\"; SqlConnection conn = new SqlConnection(OperateDB.ConnString); conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn); da.SelectCommand = cmd; da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0]; conn.Close(); }
private void button2_Click(object sender, EventArgs e) {
SqlCommandBuilder cb = new SqlCommandBuilder(da); da.Update(ds);
MessageBox.Show(\"修改成功!\"); }
4.课程设计总结
经过两周的努力我的课程设计终于完成了,在这次课程设计中我初步应用了.NET基本结构以及C#语言的基本知识和技能;也领悟了一些面向对象程序开发的基本思路和方法;还能也应用到了ADO.NET数据库开发基本知识;将课本上的知识应用到了实际,使我受益匪浅。在这次的课程设计中,我遇到了很多问题,我做的是电子邮箱客户端系统,主要是实现邮件发送和好友管理的功能。我通过上网查阅资料以及请教老师,,设计出符合课程设计任务书的电子邮箱客户端软件。起初我以为只要作品符合任务书的要求就可以了,但是在答辩的时候却遇到了很多问题,首先就是使用了资料上和老师视频中的代码,却没有去深刻理解代码的含义,以至于在马老师答辩问问题的时候没有回答出来,这份电子邮箱的课程设计确实是我自己借助于资料上的代码亲自写出来的,当收到马老师批评的时候,我深刻的认识到了知识不是你拿来用用就可以的,只有你理解了它再使用,才能学会它,并掌握它,虽然课程设计即将结束了,我准备将设计带回家去继续分析,争取真正意义上的完全领悟理解C#。
C#属于面向对象的程序设计语言,我们在课堂上学习的仅仅只是理论方面的知识,正所谓“纸
第 12 页
电子邮件客户端
上谈兵终觉浅,觉知此事要躬行”。学习任何知识,仅从理论上去求知,而不去实践与探索是不够的。所以面向对象课程设计是必须的。这样不仅能够加深我们对C#理论知识的掌握,更能真正的学以致用。
只有努力付出,才能将作品设计的更加完美,虽然我的作品没有拿到好的成绩,但我真的很珍惜这次的面向对象课程设计,它使我对面向对象程序设计语言以及面向对象程序设计的过程有了更加深刻的理解与认识,它是我学到的一笔宝贵的知识财富。
最后,在此我要非常感谢马老师、陈老师、崔老师对我的悉心指导,感谢老师们对我的帮助。
5.参考文献
[1] 邱锦伦.曹旻 Visual C#.NET程序设计教程 2006.4
[2] 程云志.张帆.崔翔 数据库原理与SQL Server2005 应用教程 2006.8
第 13 页
因篇幅问题不能全部显示,请点此查看更多更全内容