收发电子邮件系统Word下载.docx
《收发电子邮件系统Word下载.docx》由会员分享,可在线阅读,更多相关《收发电子邮件系统Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
并确定—个用户名和用户可以自己随意修改的口令。
存储空间包含存放所收信件、编辑信件以及信件存盘三部分空间,用户使用口令开启自己的信箱,并进行发信、读信、编辑、转发、存档等各种操作。
系统功能主要由软件实现。
3)电子邮件的通信是在信箱之间进行的。
用户首先开启自己的信箱,然后通过键入命令的方式将需要发送的邮件发到对方的信箱中。
邮件在信箱之间进行传递和交换,也可以与另—个邮件系统进行传递和交换。
收方在取信时,使用特定账号从信箱提取。
1.2开发背景
当前流行的各大邮件客户端软件的除了最主要的收发信件之外,功能越来越复杂,但是人们平常真正用到的功能很少,很多功能尤其对于那些计算机知识相对缺乏的人来说,更加显得太过于华丽而不太实用。
有鉴于此,在了解RFC底层协议的基础上,我们开发了这个各种功能相对简单实用的邮件客户端程序,简化了很多不必要的功能。
1.3开发环境及运行环境
1.3.1开发环境
IntelCoreDuoT2050,2G内存,320G硬盘;
Microsoft®
Windows™2003企业版;
IIS6.0(SMTP)+POP3服务器,IP地址为192.168.1.26;
MacromediaDreamweaver8;
Apache+PHP。
1.3.2运行环境
Intel®
Pentium®
2及以上处理器,32M以上内存,4G以上硬盘;
Windows™XP/NT操作系统;
800*600或以上的屏幕分辨率;
IE6.0或者其他浏览器。
第二章总体设计
电子邮件的处理由两大部分组成:
电子邮件发送程序和电子邮件接收程序。
电子邮件发送程序的发送方式有两种:
第一种是本地计算机与用户所指定的发送邮件服务器连接,然后通过发送邮件服务器将邮件传递到接收邮件服务器,邮件中包含有信件的主题和内容等一系列信息;
第二种是本地计算机直接与接收电子邮件的服务器相连,并将邮件送入收件者的邮箱中。
电子邮件接收程序则只需要处理本地计算机与存放电子邮件的服务器相连接,并通过帐号和口令从服务器中获取电子邮件,邮件中包含有信件的主题、内容和发送时间等。
2.1电子邮件的发送程序
发送邮件的程序必须能够做3件事情:
①与接收电子邮件的服务器相连接;
②将相关的信息送入收件人的信箱;
③程序还应可以判断整个过程是否能正常运行,如果不正常运行,必须给出错误信息。
一般情况下,在VC++中,电子邮件程序的编写是利用Windows自带的MAPI以及相关的通信协议SMPT/POP3等来实现的。
但是要利用MAPI和通信协议实现一个功能强大的电子邮件管理程序,需要很强的相关专业知识。
随着现代软件业的发展,软件厂商提供了方便、简易,与服务器无关且稳定的电子邮件处理组件,使我们可以在程序开发语言中调用这些组件,利用很简单的语言实现功能强大的程序。
JMail组件就是一个很好用的电子邮件程序开发第三方组件。
所以这次的课程设计我选择了JMail组件。
JMail组件中包含许多实现电子邮件处理的属性和方法。
只需要在VC++代码中创建一个JMail组件的对象,调用其中的某些功能,就能很快完成程序的开发。
JMail常用的发送邮件的基本属性和方法如表1所示。
表1JMail常用发送邮件的基本属性和方法
方法和属性
功能
Body
邮件内容
Charset
字符集,默认为“US-ASCII”
Sendname
发送人姓名
Sender
发送人邮箱地址
Serveraddress
SMPT服务器地址,可制定多个,用分号分开,并可指定端口;
为空白时,JMail会尝试解决远程邮件服务器,然后直接发送。
Subject
标题
Priority
优先级(1:
高优先级;
3:
普通优先级;
5:
低优先级)
AddAttachment(“filename”,[ContentType])
添加文件附件
AddCustomAttachment(“filename”,data)
添加自定义附件
AddURLAttachment
(“bstrURL”,“bstrAttachAS”,[bstrAuth])
下载并添加一个来自bstrURL的附件,BstrAttachAS指定受到信件的文件名。
AddRecipient(“Email-Address”)
增加一个收件人
AddRecipientEX(“Email-Address”,“name”)
增加一个带名字的收件人
AppendBodyFromFile(“filename”)
将一个文件追加到正文后
AppendText(“Text”)
追加信的正文内容
Execute()方法
执行发送
Close()方法
强制JMail关闭缓冲与邮件服务器的连接
由于JMail是第三方组件,因此VC++程序要想调用JMail对象,就必须先下载JMail动态链接库,并在本机中进行注册。
具体操作方法如下:
打开运行对话框,输入cmd,打开命令提示符编辑器,输入如下指令即可注册成功:
(JMail组件的安装路径)regsvr32jmail.dll
2.2电子邮件的接受程序
接收邮件的程序必须能够做三件事:
①与存放电子邮件的服务器相连接;
②读取相关的信件信息,并存放与本地计算机中;
③程序还将判断整个过程是否能正常运行,如果不正常运行,必须给出错误信息。
与电子邮件发送程序的编写相同,我还是采取VC++语言和JMail组件相结合的方法来实现邮件的收取。
JMail常用的接收邮件的基本属性和方法如表2所示。
表2JMail常用接收信件的基本属性和方法
字符集,默认为(US-ASCII)
Date
信件发送日期
MailServer
邮箱所在的服务器
Timeout
连接服务器的超时限制
Connect()
连接服务器,需要参数:
帐号、口令、服务器地址、端口
第三章详细体系设计
3.1总体体系结构图
电子子邮件接受方式程序主要由以下两个大的模块构成:
发送邮件模块和收取邮件模块。
其功能模块如图1所示:
图3-1软件架构图
3.2电子邮件发送程序的主要模块
电子邮件发送程序主要由以下几个模块组成:
①邮件服务器:
用于填写收件人的邮箱服务器(可以不填);
②收件人信箱:
用于填写收件人的邮箱名;
③发件人信箱:
用于填写发件人的邮箱名;
④主题:
用于填写信件主题;
⑤正文:
用于写入信件正文;
⑥退出:
用于退出发件程序;
⑦发送:
用于发送邮件;
3.3电子邮件接受程序的主要模块
电子邮件接收程序主要由以下几个模块组成:
用于填写需要收取信件信箱的服务器;
②帐号:
用于填写需要收取信件的邮箱帐号;
③口令:
用于填写需要收取信件的邮箱密码;
④邮件列表:
显示邮箱中所有邮件的列表;
当选中邮件列表中任一邮件时,显示该封信件的具体内容;
用于退出接收邮件程序;
⑦收取:
用于收取信件。
3.4对于SMTP和POP3协议的研究
在邮件发送程序中,用户可以利用SMPT服务器向朋友发送电子邮件,也可以直接尝试链接朋友的E-mail信箱所在的服务器。
这次课程设计我所利用的JMail组件封装了很强的电子邮件处理功能,如附件传递、用户的跟踪服务、发布产品信息,以及电子报刊处理等功能。
在邮件接受程序中,用户可以向POP3服务器收取电子邮件。
用户打开邮箱后,将利用JMail组件创建的对象指针遍历邮箱中的所有邮件,并将邮件信息下载存放于本地计算机中,利用List控件的扩展属性显示邮件的正文内容。
3.5程序设计说明
3.5.1主要模块:
由Server和Client组成。
在Server这一端初始化winsock、创建会话socket、bind一个端口、设置等待链接状态、连接并生成会话、调用send和recv、关闭socket。
3.5.2模块功能:
初始化winsock:
完成一系列初始化的工作。
创建会话socket:
所有的通信在建立之前都要建一个socket。
bind一个端口:
成功创建了一个socket后,用bind函数将socket和主机地址绑定。
设置等待链接状态:
对于服务器的程序,当申请到socket,并将通信对象指定为inaddr_any之后,就应该等待一个客户机的程序来要求连接,listen函数就是把一个socket设置为这个状态。
连接并生成会话:
accept函数从等待连接的队列中取第一个连接请求,并且创建一个新的socket来负责与客户端会话。
调用send和recv:
sendto一般用于无连接的socket发送数据报文,报文的接受者由to参数指定。
Recvfrom一般用于通过无连接的socket接收数据报文,报文的发送者由from参数指定。
关闭socket:
关闭指定的socket。
第四章程序代码及运行
4.1服务器端执行结果
4.2客户端执行结果
4.3开多个客户端,利用多线程实现
4.4邮件客户端源代码
#pragmaonce
#include"
EmailClient.h"
base64.h"
#include<
iostream>
usingnamespacestd;
voidSendMail(){
Clientclient;
if(client.Init()==EXIT_FAILURE)return;
//设置发件人地址、收件人地址
stringfrom="
*****************"
;
stringto="
stringresponseFromServer;
stringcommandToServer;
stringusername="
cnbluesky"
stringpassword="
stringencodedUserName;
stringencodedPassword;
//设置邮件正文
stringmailContent="
From:
"
+from+"
\n"
+
"
To:
+to+"
Subject:
+"
Test"
+
"
Thisisatestemail!
"
//得到主机名
stringlocalHostName=client.GetLocalHostName();
//接受服务器的应答
responseFromServer=client.RecvMsg();
//显示来自服务器的应答
cout<
<
MailServer:
+responseFromServer;
//准备发送到服务器的命令
commandToServer="
EHLO"
+localHostName+"
\r\n"
//EHLO主机名
Client:
+commandToServer;
//发送命令
client.SendMsg(commandToServer);
//Sleep(1000);
size_tfound;
do{
responseFromServer=client.RecvMsg();
//显示来自服务器的应答
cout<
found=responseFromServer.find("
250"
);
}while(found==string:
:
npos);
commandToServer=string("
AUTHLOGIN"
)+"
//AUTHLOGIN//接收服务器的应答
//将用户名和密码进行base64编码
encodedUserName=base64_encode(reinterpret_cast<
constunsignedchar*>
(username.c_str()),username.length());
encodedPassword=base64_encode(reinterpret_cast<
(password.c_str()),password.length());
commandToServer=encodedUserName+"
//用户名
//接收服务器的应答
commandToServer=encodedPassword+"
//密码
MAILFROM:
<
>
//MAILFROM:
发送信箱>
RCPTTO:
//RCPTTO:
接收信箱>
DATA"
//DATA
//准备发送邮件正文
commandToServer=mailContent+"
//邮件正文
."
//结束标记"
QUIT"
//QUIT
stringinput;
do{
\nPleaseenter'
q'
toquit:
cin>
input;
}while(input!
="
q"
return;
}
第五章小结
在这次的设计学习中,不仅巩固了以前学校学到的很多知识,还学到了许多新的知识。
对自己所学的专业已经有了较深的认识。
在设计方案中,吸取了大量书本以及网络上的知识,在大大扩展了自己知识面的同时,还认识了自己学习的专业在社会上的应用,初次把大量的知识应用到实践中去,发现了许许多多的问题,体会到了书本上学不到的东西,从实践中成长许多。
真正认识到单单的理论学习是不够的,只有理论结合实践,遇到问题及时解决,吸取大量的实践经验,才对自己有莫大的帮助。
计算机网络是一门很有用的学科。
通过此次的设计,迫使我对网络安全方面有了更深层次的了解,设计一个全方位的安全方案是非常不容易的,涉及的方面也很多,要考虑到的东西方方面面,还需要认识到各种的配合使用与兼容性。
但由于增加了自己对这方面的知识,对网络的安全方面更感兴趣了,也坚信它未来的优势,安全无止境!