邮件报告.docx
- 文档编号:4325489
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:45
- 大小:425.91KB
邮件报告.docx
《邮件报告.docx》由会员分享,可在线阅读,更多相关《邮件报告.docx(45页珍藏版)》请在冰豆网上搜索。
邮件报告
计算机网络编程
——邮件多发
班级:
计092,计093
姓名:
王莞瞳,罗其会,张幸运
学号:
090715,090688,090721
教师:
张晓明
信息工程学院计算机系
一.实验目的
二.实验准备
三.实验内容
四.运行效果图及核心代码片段
1.邮件多发程序主界面
2.分隔多个收件人
3.添加联系人、删除联系人、导入联系人
4.从文件中读出联系人、向文件中写入联系人
5.对邮件内容加密
6.判断邮箱地址是否正确
六遇到的问题
七实验体会
一.实验目的
1了解E-Mail协议的工作原理
2掌握SMTP,ESMTP,POP3协议格式及其编程方法
3掌握Systm..WebMail和JMail的编程方法。
二.实验准备
1读懂E-Mail服务程序设计的代码
2了解E-mail组成
3熟练MicrosoftVisualStudio软件及其组建的应用
三.实验内容
实现群发地址可以输入,从文件导入,从地址簿导入;发送内容可以加密等功能。
四.运行效果图及核心代码片段
1.邮件多发程序主界面
2.分隔多个收件人
privatevoidbtnSend_Click(objectsender,System.EventArgse)
{
listBoxMsg.Items.Clear();
stringxy=tBRev.Text;
string[]xyz=xy.Split(newchar[]{';'},StringSplitOptions.RemoveEmptyEntries);
intnum=xyz.Length;
for(inti=0;i { try { stringdata; pb1.Visible=true; labelp.Visible=true; pb1.Value=0; //建立与SMTP服务器的连接 smtpSrv=newTcpClient(tBSrv.Text,25); //tBSrv.Text是邮件地址,25是发送邮件的端口号 //获取一个网络流对象,以便通过网络连接来发送和接收数据 netStrm=smtpSrv.GetStream(); //生成一个StreamReader对象,用于从流中读取数据 StreamReaderrdStrm=newStreamReader(smtpSrv.GetStream()); //读取服务器返回的信息赋值给rdStrm //向服务器发送EHLOLocal,请求建立连接 WriteStream("EHLOLocal");//读取服务器返回的信息,并写入信息列表中 listBoxMsg.Items.Add(rdStrm.ReadLine()); //将rdStrm里的数据作为一行字符串显示到listBoxMsg pb1.Value++; //向服务器发送AUTHLOGIN,请求认证 WriteStream("AUTHLOGIN");listBoxMsg.Items.Add(rdStrm.ReadLine()); //将rdStrm里的数据作为一行字符串显示到listBoxMsg(需要用户名) pb1.Value++; data=tBUser.Text; //转换为Base64编码格式 data=AuthStream(data);//经过Base64处理的用户名发送给服务器 //向服务器发送用户名 WriteStream(data); listBoxMsg.Items.Add(rdStrm.ReadLine()); //将rdStrm里的数据作为一行字符串显示到listBoxMsg(需要密码) pb1.Value++; data=tBpwd.Text; //转换密码为Base64编码格式,且传送给服务器 data=AuthStream(data);//经过Base64处理的密码发送给服务器 WriteStream(data); listBoxMsg.Items.Add(rdStrm.ReadLine()); //将rdStrm里的数据作为一行字符串显示到listBoxMsg(认证成功) pb1.Value++; //开始发送EMAIL的信封 //发信人的EMAIL地址 data="MAILFROM: <"+tBSend.Text+">"; WriteStream(data);//malilfrom(客户端向服务器发送的) listBoxMsg.Items.Add(rdStrm.ReadLine()); //将rdStrm里的数据作为一行字符串显示到listBoxMsg(250) pb1.Value++; //收信人的EMAIL地址 data="RCPTTO: <"+xyz[i]+">";//修改此处 WriteStream(data);//13.RCPTTO(客户端向服务器发送的) listBoxMsg.Items.Add(rdStrm.ReadLine()); //将rdStrm里的数据作为一行字符串显示到listBoxMsg(250) pb1.Value++; //开始发送数据 WriteStream("DATA");//15.data(客户端向服务器发送的) listBoxMsg.Items.Add(rdStrm.ReadLine()); //将rdStrm里的数据作为一行字符串显示到listBoxMsg(354开始邮件输入) pb1.Value++; //开始发送邮件的首部信息 data="Date: "+DateTime.Now;//发送日期 WriteStream(data); pb1.Value++; //发送邮件发送者信息 data="From: "+tBSend.Text; WriteStream(data); pb1.Value++; //发送邮件接收者信息 data="TO: "+xyz[i]; WriteStream(data); pb1.Value++; //发送邮件的主题 data="SUBJECT: "+tBSubject.Text; WriteStream(data);//主题(客户端向服务器发送的) pb1.Value++; //发送回复地址 data="Reply-TO: "+tBSend.Text; WriteStream(data); pb1.Value++;//发送一个空行,表示首部结束,开始正文发送 WriteStream(""); pb1.Value++;//发送邮件正文 //WriteStream(tBMailText.Text); WriteStream(txtEnFile.Text); pb1.Value++; WriteStream(".");//发送“.”,表示邮件内容结束 pb1.Value++; listBoxMsg.Items.Add(rdStrm.ReadLine()); //将rdStrm里的数据作为一行字符串显示到listBoxMsg(250系统指令正确发送) WriteStream("QUIT");//发送断开连接命令 pb1.Value++; listBoxMsg.Items.Add(rdStrm.ReadLine()); //将rdStrm里的数据作为一行字符串显示到listBoxMsg(221服务关闭) netStrm.Close(); rdStrm.Close(); pb1.Visible=false; labelp.Visible=false; MessageBox.Show("邮件发送成功! ","成功"); } catch(Exceptionex) { MessageBox.Show(ex.ToString(),"操作错误! "); } } } 3.添加联系人、删除联系人、导入联系人 1)添加联系人 //向邮箱簿中加入邮箱 privatevoidbutten1_Click(objectsender,EventArgse) { if(textBox1.Text=="")//判断是否在textbox1中加入邮箱 { MessageBox.Show("请输入要添加的邮箱! "); } else//如果textbox1中有邮箱向邮箱簿中添加 { listBox1.Items.Add(textBox1.Text); textBox1.Text=string.Empty;//清空textbox1中的内容 } } privatevoidForm1_Load(objectsender,EventArgse) { listBox1.HorizontalScrollbar=true;//显示水平方向的滚动条 listBox1.ScrollAlwaysVisible=true;//显示垂直方向的滚动条 } 2)删除联系人 //将选中的邮箱簿中的邮箱删除 privatevoidbutton2_Click(objectsender,EventArgse) { if(listBox1.SelectedItems.Count==0)//判断是否选择邮箱 { MessageBox.Show("请选择要删除的邮箱! ");//如果没有选择邮箱,弹出提示 } else { listBox1.Items.Remove(listBox1.SelectedItem);//使用Remove方法移除选中项 } } 3)导入联系人 //将选中的邮箱簿中的邮箱导入收件人 privatevoidbutton3_Click(objectsender,EventArgse) { if(listBox1.SelectedItems.Count==0) { MessageBox.Show("请选择要导入的邮箱! ");//如果没有选择邮箱,弹出提示 } else { stringst=listBox1.SelectedItem.ToString(); tBRev.Text+=st+';';//将选中的邮箱加入收件人 } } 4.从文件中读出联系人、向文件中写入联系人 1)从文件中读出联系人 //从某一个txt文件读出所有邮箱 privatevoidbutton4_Click(objectsender,EventArgse) { openFileDialog1.Filter="文本文件(*.txt)|*.txt";//设置打开文件的格式 if(openFileDialog1.ShowDialog()==DialogResult.OK) { tBRev.Text=string.Empty;//清空字符串前后多余空字符 StreamReadersr=newStreamReader(openFileDialog1.FileName); stringcc=sr.ReadToEnd();//读取文件中的所有内容 string[]s=cc.Split('\n');//把文件中的换行作为一个分隔符,放入数组 foreach(stringlineins)//遍历数组 { tBRev.Text+=line+";";//将从文件中读出的每行后加‘;’号 } sr.Close(); } } 2)向文件中写入联系人 //将textbox1中输入的邮箱,写入某一个指定的文件 privatevoidbutton5_Click(objectsender,EventArgse) { if(textBox1.Text==string.Empty) { MessageBox.Show("要写入的文件内容不能为空"); } else { saveFileDialog1.Filter="文本文件(*.txt)|*.txt";//设置保存文件的格式 if(saveFileDialog1.ShowDialog()==DialogResult.OK) { StreamWritersw=newStreamWriter(saveFileDialog1.FileName,true); sw.WriteLine(textBox1.Text);//将textbox1中的邮箱写入文 sw.Close(); textBox1.Text=string.Empty; } } } 5.对邮件内容加密 //对邮件的内容进行加密 privatevoidbutton6_Click(objectsender,EventArgse) { txtEnFile.Text=string.Empty; System.Security.Cryptography.MD5md5=newSystem.Security.Cryptography.MD5CryptoServiceProvider(); byte[]beforeEncrypt=System.Text.Encoding.Default.GetBytes(tBMailText.Text.Trim());//将字符编码为一个序列 byte[]md5Data=md5.ComputeHash(beforeEncrypt);//计算指定字节数组的HASH值 md5.Clear(); stringstr=string.Empty; for(inti=0;i { str+=md5Data[i].ToString("x").PadLeft(2,'0');//X为大写,则加密后显示大写,否则为小写 } txtEnFile.Text=str; } 6.判断邮箱地址是否正确 //判断邮箱格式是否正确 privatevoidcmdConfirm_Click_1(objectsender,EventArgse) { //stringbb=tBRev.Text; stringaa=tBRev.Text;//读取文件中的所有内容 string[]str_Email=aa.Split(';');//把文件中的";"作为一个分隔符,放入数组 foreach(stringlineinstr_Email)//遍历数组 { //tBRev.Text+=line+";";//将从文件中读出的每行后加‘;’号 if(System.Text.RegularExpressions.Regex.IsMatch(line,@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$")) //验证Email地址: "^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$" //@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"是一个正则表达式,正则表达式是匹配文本的一个模式,通过各种语言的各种方法可以实现提取,匹配,替换,切割等操作 //^是强制开头必须是\w //\w是字母数字的表达式,\w+是多个字母和数组集合 //[-+.]这里就是+的意思 //([-.]\w+)*这*表示多个意思 //$表示结尾 //直接写成^(.+)@(.+)$也可以 { MessageBox.Show("邮箱格式输入正确");//通过验证 } else { MessageBox.Show("邮箱格式输入不正确");//未通过验证 } } 添加: (1)在服务器地址栏可以选择常用邮箱的服务器地址 一些常用邮箱的邮件服务器信息: 163邮箱: 263邮箱: 中国网邮箱: 168邮箱: 雅虎邮箱: Gmail: QQ邮箱: Tom邮箱: 新浪: 搜狐: 126免费邮箱: 亿邮(eY): (2) 验证Email地址解释: //验证Email地址: "^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$" //@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"是一个正则表达式,正则表达式是匹配文本的一个模式,通过各种语言的各种方法可以实现提取,匹配,替换,切割等操作 //^是强制开头必须是\w //\w是字母数字的表达式,\w+是多个字母和数组集合 //[-+.]这里就是+的意思 //([-.]\w+)*这*表示多个意思 //$表示结尾 //直接写成^(.+)@(.+)$也可以 对str+=md5Data[i].ToString("x").PadLeft(2,'0')的解释 //是把MD5所得用进制小写的字符串形式,让函数返回一个字节长的可打印字符串。 若X为大写,则加密后显示大写,若x为小写,则加密后显示为小写 //PadLeft(inttotalWidth,charpaddingChar)在字符串左边用paddingChar补足totalWidth长度 六遇到的问题 1.在做读出文件和写入文件时由于在文件和数据流不太熟悉,开始总是写不进文件,但是在看书后,就解决了问题。 2.在加密过程中由于Cryptography方法和对数据流中的Cryptostream不是很熟悉,所以造成了一些麻烦。 3.从文件导入的邮箱地址后面有\n,所以检查邮件格式时,不正确,可以通过trim()去掉空白字符来解决。 4.发送邮件仍需单步执行,才可发送到达,不能解决 七实验体会 通过此次网络邮件群发程序设计,我们初步了解了E-Mail协议的工作原理,也学会了用SMTP,ESMTP,POP3协议格式进行编程的方法,也进一步加强了对MicrosoftVisualStudio软件及其组建的应用,我们注重团队合作,充分发挥每个人的长处,很融洽的完成了任务。 附录: usingSystem; usingSystem.Drawing; usingSystem.Collections; usingSystem.ComponentModel; usingSystem.Windows.Forms; usingSystem.Data; usingSystem.Net; usingSystem.Net.Sockets; usingSystem.IO; usingSystem.Security.Cryptography; usingSystem.Text.RegularExpressions; namespaceESMTP { /// ///Form1的摘要说明。 /// publicclassForm1: System.Windows.Forms.Form { //创建实例 RijndaelManagedrij=newRijndaelManaged(); privateSystem.Windows.Forms.LabellabelSrv; privateSystem.Windows.Forms.TextBoxtBpwd; privateSystem.Windows.Forms.LabellabelPwd; privateSystem.Windows.Forms.TextBoxtBUser; privateSystem.Windows.Forms.LabellabelUser; privateSystem.Windows.Forms.LabellabelSender; privateSystem.Windows.Forms.TextBoxtBSend; privateSystem.Windows.Forms.LabellabelRev; privateSystem.Windows.Forms.TextBoxtBRev; privateSystem.Windows.Forms.TextBoxtBSubject; privateSystem.Windows.Forms.Labellabelsubject; privateSystem.Windows.Forms.TextBoxtBMailText; privateSystem.Windows.Forms.ButtonbtnSend; privateSystem.Windows.Forms.ProgressBarpb1; privateSystem.Windows.Forms.Labellabelp;//进度条前面的标识 privateSystem.Windows.Forms.LabellabelTxt;//邮件内容前面的标识 privateSystem.Windows.Forms.LabellabelMsg;//协议信息查看前面的标识 privateSystem.Windows.Forms.ListBoxlistBoxMsg;//协议信息查看框 privateGroupBoxgbBox1; privateGroupBoxgbBox2; privateLabellabellxr; privateBut
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 邮件 报告