VC高级编程课程设计报告邮件客户端Word下载.docx
《VC高级编程课程设计报告邮件客户端Word下载.docx》由会员分享,可在线阅读,更多相关《VC高级编程课程设计报告邮件客户端Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
![VC高级编程课程设计报告邮件客户端Word下载.docx](https://file1.bdocx.com/fileroot1/2022-10/10/4b10f7b6-72ab-4842-a6bd-d3d999de2514/4b10f7b6-72ab-4842-a6bd-d3d999de25141.gif)
6.总结15
7.参考文献15
1.前言
电子邮件(简称E-mai1)又称电子信箱,它是—种用电子手段提供信息交换的通信方式。
它是全球多种网络上使用最普遍的一项服务。
这种非交互式的通信,加速了信息的交流及数据传送。
通过Internet,实现各类信号的传送、接收、存储等处理,将邮件送到世界的各个角落。
到目前为止,可以说电子邮件是Internet资源使用最多的一种服务,E-mai1不只局限于信件的传递,还可用来传递文件、声音及图形、图像等不同类型的信息。
电子邮件不是一种“终端到终端”的服务,是被称为“存储转发式”服务。
这正是电子信箱系统的核心,利用存储转发可进行非实时通信,属异步通信方式。
即信件发送者可随时随地发送邮件,不要求接收者同时在场,即使对方现在不在,仍可将邮件立刻送到对方的信箱内,且存储在对方的电子邮箱中。
接收者可在他认为方便的时候读取信件,不受时间和空间限制。
电子邮件的传输是通过电子邮件简单传输协议(SimpleMailTransferProtocol,简称SMTP)这一系统软件来完成的,它是Internet下的一种电子邮件通信协议。
JMail组件功能强大,可以轻松的完成邮件发送,接收,加密,集群传输等工作。
本软件采用JMail组件完成大部分功能。
2.系统功能和使用说明
2.1系统功能
系统实现的主要功能:
(1)邮件的发送
(2)邮件的接收
(3)添加附件
(4)下载附件
2.2使用说明
本软件使用C++语言,MicrosoftVisualC++6.0集成开发环境,JMail组件开发。
在Windows2000及以上版本的Windows操作系统中运行。
3.系统设计
3.1邮件发送模块
用户选择发送邮件时,需要填写相关账户信息和邮件服务器(SMTP服务器)信息。
向服务器发出申请前对用户输入的数据进行简单的合法性检查。
邮件发送模块的流程图如图3.1
3.2邮件接收模块
用户选择接收邮件时,填写相关账户信息和邮件服务器信息(POP服务器)信息。
邮件接收模块的流程图如图3.2
4.系统实现
在对话资源上能添加多个控件,同时利用类向导为编辑控件及列表控件添加变量、系统控件ID、标题及对应的变量名,如表4.1。
软件主界面如图4.1。
控件ID
作用
变量类型
变量名
IDC_NAME
接受发信人的昵称
CString
m_name
IDC_SENDAD
发信人的邮箱地址
m_sendad
IDC_PASSWORD
密码
m_password
IDC_SMTP
SMTP服务器
m_smtp
IDC_POP
POP3服务器
m_pop3
IDC_REVAD
收信人地址
m_revad
IDC_SUBJECT
标题
m_subject
IDC_BODY
正文
m_body
IDC_LIST
显示附件情况
CListCtrl
m_list
表4.1控件表
创建了上面的控件并且为控件添加变量以后,就可以进行相应的模块设计,包括收信和写信两个功能。
对于收信和写信,首先要单击“写信”按钮或者“收信”按钮,使得相应的控件可用,然后填写上相应的参数,单击“确定”按钮进行收信和发信。
4.2发信模块设计
发信模块是系统最重要的功能之一,前面已经介绍了发信的主要实现过程,利用SMTP协议进行与服务器之间的对话,从而发送整个信件。
本软件利用了JMail组件的功能来完成的。
在本模块中单击“确定”按钮,实现发送过程。
图4.1主界面
(1)在类向导生成的CTestDlg添加一个BOOL型变量flag,用来保存是发信还是收信。
利用类向导添加单击“写信”按钮的消息映射代码。
“写信”按钮的主要功能是控制各个控件的状态。
voidCEmailClientDlg:
:
OnSend()
{
GetDlgItem(IDOK)->
EnableWindow(TRUE);
GetDlgItem(IDC_NAME)->
GetDlgItem(IDC_SENDAD)->
GetDlgItem(IDC_PASSWORD)->
GetDlgItem(IDC_SMTP)->
GetDlgItem(IDC_POP)->
EnableWindow(FALSE);
GetDlgItem(IDC_REVAD)->
GetDlgItem(IDC_SUBJECT)->
GetDlgItem(IDC_BODY)->
GetDlgItem(IDC_ADD)->
GetDlgItem(IDC_LIST)->
//清空所有控件内容
m_list.DeleteAllItems();
//清空附件列表
m_body="
"
;
m_name="
m_password="
m_pop="
m_revad="
m_sendad="
m_smtp="
m_subject="
UpdateData(false);
flag=true;
//记录是发信状态
}
(2)利用类向导添加“添加附件”按钮的消息映射,此段代码的作用是可以使该邮件发送其他类型的文件(图片、音乐、小视频等等)。
voidCTestDlg:
OnAdd()
//TODO:
Addyourcontrolnotificationhandlercodehere
CFileDialogdlg(true,NULL,NULL,OFN_ALLOWMULTISELECT);
if(dlg.DoModal()==IDOK)
{
POSITIONpos=dlg.GetStartPosition();
while(pos!
=NULL)
{
longi=m_list.GetItemCount();
m_list.InsertItem(m_list.GetItemCount()+1,dlg.GetNextPathName(pos));
//AddString(dlg.GetNextPathName(pos));
CStringstr;
str=m_list.GetItemText(i,0);
}
}
(3)当附件添加后,有可能因为自己不喜欢而需要删除此附件,因此在用户不想要是可以双击要选中的控件来实现删除。
注意此时是发送信件的状态,如果是收信状态,双击实现附件下载的功能。
利用类向导添加双击列表控件项的消息映射。
OnDblclkList(NMHDR*pNMHDR,LRESULT*pResult)
if(flag==TRUE)
if(IDOK==MessageBox("
确定删除此项吗?
"
删除提示"
MB_OKCANCEL|MB_ICONQUESTION))
intnItem=m_list.GetNextItem(-1,LVNI_SELECTED);
m_list.DeleteItem(nItem);
UpdateData(FALSE);
*pResult=0;
(4)当用户单击“确定”按钮后,进行发送信件操作代码。
分析:
该代码是利用JMail进行邮件发送的部分。
首先确定参数的合法性,当然这只能是简单的检查,所有内容必须由用户进行正确的设置。
在使用JMail控件之前,可以在网上下载安装程序。
安装后,把jmail.dll文件复制到当前工程目录下,并在StdAfx.h文件中加入语句
#import“jmail.dll”
usingnamespacejmail;
OnOK()
Addextravalidationhere
//参数的获取与判断
UpdateData(true);
m_sendad.TrimRight();
//去掉后面多于空格
m_password.TrimRight();
m_smtp.TrimRight();
m_revad.TrimRight();
m_subject.TrimRight();
m_body.TrimRight();
m_name.TrimRight();
//判断参数是否合法
if(m_revad.GetLength()<
3)
AfxMessageBox("
请填写正确的收件人邮箱"
);
return;
if(m_sendad.GetLength()<
请填写正确的发信人邮箱"
if(m_body=="
)
请填写正文"
if(m_subject=="
if(IDCANCEL==MessageBox("
确定不填写标题吗?
提示"
MB_OKCANCEL|MB_ICONQUESTION))
return;
if(m_name=="
确定不填写昵称吗?
//进行发信
try
CoInitialize(NULL);
//COM的初始化
jmail:
IMessagePtrpMessage("
JMail.Message"
pMessage->
From=(LPCTSTR)m_sendad;
//发件人邮箱
FromName=_bstr_t(m_nam