邮件报告.docx

上传人:b****6 文档编号:4325489 上传时间:2022-11-29 格式:DOCX 页数:45 大小:425.91KB
下载 相关 举报
邮件报告.docx_第1页
第1页 / 共45页
邮件报告.docx_第2页
第2页 / 共45页
邮件报告.docx_第3页
第3页 / 共45页
邮件报告.docx_第4页
第4页 / 共45页
邮件报告.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

邮件报告.docx

《邮件报告.docx》由会员分享,可在线阅读,更多相关《邮件报告.docx(45页珍藏版)》请在冰豆网上搜索。

邮件报告.docx

邮件报告

计算机网络编程

——邮件多发

 

班级:

计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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1