邮件报告.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软件及其组建的应用
实现群发地址可以输入,从文件导入,从地址簿导入;发送内容可以加密等功能。
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里的数据作为一行字符串显示到listBoxMsgpb1.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
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(需要用户名)
data=tBUser.Text;
//转换为Base64编码格式
data=AuthStream(data);//经过Base64处理的用户名发送给服务器
//向服务器发送用户名
WriteStream(data);
//将rdStrm里的数据作为一行字符串显示到listBoxMsg(需要密码)
data=tBpwd.Text;
//转换密码为Base64编码格式,且传送给服务器
data=AuthStream(data);//经过Base64处理的密码发送给服务器
//将rdStrm里的数据作为一行字符串显示到listBoxMsg(认证成功)
//开始发送EMAIL的信封
//发信人的EMAIL地址
data="MAILFROM:
<"+tBSend.Text+">";
WriteStream(data);//malilfrom(客户端向服务器发送的)
//将rdStrm里的数据作为一行字符串显示到listBoxMsg(250)
//收信人的EMAIL地址
data="RCPTTO:
<"+xyz[i]+">";//修改此处
WriteStream(data);//13.RCPTTO(客户端向服务器发送的)
//开始发送数据
WriteStream("DATA");//15.data(客户端向服务器发送的)
//将rdStrm里的数据作为一行字符串显示到listBoxMsg(354开始邮件输入)
//开始发送邮件的首部信息
data="Date:
"+DateTime.Now;//发送日期
//发送邮件发送者信息
data="From:
"+tBSend.Text;
//发送邮件接收者信息
data="TO:
"+xyz[i];
//发送邮件的主题
data="SUBJECT:
"+tBSubject.Text;
WriteStream(data);//主题(客户端向服务器发送的)
//发送回复地址
data="Reply-TO:
pb1.Value++;//发送一个空行,表示首部结束,开始正文发送
WriteStream("");
pb1.Value++;//发送邮件正文
//WriteStream(tBMailText.Text);
WriteStream(txtEnFile.Text);
WriteStream(".");//发送“.”,表示邮件内容结束
//将rdStrm里的数据作为一行字符串显示到listBoxMsg(250系统指令正确发送)
WriteStream("QUIT");//发送断开连接命令
//将rdStrm里的数据作为一行字符串显示到listBoxMsg(221服务关闭)
netStrm.Close();
rdStrm.Close();
pb1.Visible=false;
labelp.Visible=false;
MessageBox.Show("邮件发送成功!
","成功");
}
catch(Exceptionex)
MessageBox.Show(ex.ToString(),"操作错误!
");
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("请选择要导入的邮箱!
stringst=listBox1.SelectedItem.ToString();
tBRev.Text+=st+';';//将选中的邮箱加入收件人
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("要写入的文件内容不能为空");
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;
//对邮件的内容进行加密
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
str+=md5Data[i].ToString("x").PadLeft(2,'0');//X为大写,则加密后显示大写,否则为小写
txtEnFile.Text=str;
//判断邮箱格式是否正确
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("邮箱格式输入正确");//通过验证
MessageBox.Show("邮箱格式输入不正确");//未通过验证
添加:
(1)在服务器地址栏可以选择常用邮箱的服务器地址
一些常用邮箱的邮件服务器信息:
163邮箱:
263邮箱:
中国网邮箱:
168邮箱:
雅虎邮箱:
Gmail:
QQ邮箱:
Tom邮箱:
新浪:
搜狐:
126免费邮箱:
亿邮(eY):
(2)
验证Email地址解释:
对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