电子邮件发送和接收程序的开发设计和实现 计算机科学与技术专业_第1页
电子邮件发送和接收程序的开发设计和实现 计算机科学与技术专业_第2页
电子邮件发送和接收程序的开发设计和实现 计算机科学与技术专业_第3页
电子邮件发送和接收程序的开发设计和实现 计算机科学与技术专业_第4页
电子邮件发送和接收程序的开发设计和实现 计算机科学与技术专业_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录TOC\o"1-3"\h\zHYPERLINK1.2功能要求 2HYPERLINK2.1电子邮件介绍 2HYPERLINK2.2.1电子邮件的发送程序 3HYPERLINK2.3模块分析 4HYPERLINK2.3.2电子邮件接收程序的主要模块 5HYPERLINK3.1添加“关于”标签的测试 5HYPERLINK3.3收取邮件的测试 8HYPERLINK4.1课程小结 8HYPERLINK附录(源代码) 9HYPERLINK2电子邮件发送程序的代码 10HYPERLINK//注意这两行必须添加#defineCRLF2CRLFCRLF(2)主要代码如下:BOOLCAboutDlg::OnInitDialog(){ CDialog::OnInitDialog(); //TODO:Addextrainitializationhere m_strEditHelp="相关帮助信息:" CRLF CRLF"一、发送邮件服务器和发信人信箱有密切关系,假如你的信箱为loop@,则发送邮件服务器一般为:,当然这也不是绝对的,你可以到你的邮件相关网站查询。不知道服务器名的话也可以不填!"CRLF CRLF "二、发信信箱格式比较灵活,如下两种格式均为合法的:1在你的E-Mail首尾加小于大于符号:<loomman@>2直接填写你的E-Mail:loomman@"CRLF CRLF"三、接受信箱可以为多个,中间用分号;隔开,例如:Pookie<pookie@>;snuggles<snuggles@>;<loomman@>某些信箱前面的部分字符串是收信人名称,例如上面的Pookie可以省略不写,例如下面一行和上面一行是等价的,它们都是可以接受的信箱输入格式。<pookie@>;<snuggles@>;<loomman@>"CRLF CRLF"四、邮件主题,当然就是邮件的标题了,你可以随意输入自己喜爱的标题。" CRLFCRLF"五、邮件正文就是你要发给对方的信息。"CRLF CRLF"六、最后不得不提一下,由于当今好多发送邮件服务器都要求身份验证,也就是需要提供的你的信箱密码,鉴于技术问题,这类信箱本程序暂时不支持。"CRLF CRLF "周清周庆蒯志刚于雯" CRLF "2007年7月"CRLF;UpdateData(FALSE);//UpdatetheDialog returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}2、发送邮件程序代码:(1)往头文件StdAfx.h中添加JMail对象的声明,这样才能在整个程序中应用JMail对象.代码如下:#import"C:\jmail\jmail.dll"//显示指定JMail动态链接库usingnamespacejmail;//定义程序中JMail对象的名称(2)头文件MailServer.h,利用ClassWizard类项导添加退出应用程序的函数ExitInstnace().源代码如下://Overrides //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(CMailServerApp) public: virtualBOOLInitInstance(); virtualintExitInstance(); //}}AFX_VIRTUAL(3)源文件MailServer.cpp,类CMailServerApp的实现文件.1)由于程序中应用了JMail组件,因此必须在InitInstance()函数中添加如下代码,进行应用程序的初始化.BOOLCMailServerApp::InitInstance(){ AfxEnableControlContainer(); ::CoInitialize(NULL);#ifdef_AFXDLL Enable3dControls(); //CallthiswhenusingMFCinasharedDLL……}2)应用程序时,在ExitInstance()函数中添加释放各变量的代码.//应用程序退出时intCMailServerApp::ExitInstance(){ //TODO:Addyourspecializedcodehereand/orcallthebaseclass returnCWinApp::ExitInstance(); ::CoUninitialize();}(4)MailServerDlg.h中,CMailServerDlg类的接口.1)在头文件MailServerDlg.h中,添加各控件的控件变量,如下表所示.控件控件变量IDC_EDIT_MAILSERVERm_strmailserverIDC_EDIT_RECIPIENTSm_strrecipientsIDC_EDIT_SENDERm_strsenderIDC_EDIT_SUBJECTm_strsubjectIDC_EDIT_BODYm_strbody2)利用ClassWizard添加IDOK控件的ON_BN_CLICKED事件函数,代码如下:Protected://{{AFX_MSG(CMailServerDlg)……Afx_msgvoidOnSend();//}}AFX_MSG……3)源文件MailServerDlg.cpp,类CMailServerDlg的实现文件.打开MailServerDlg.cpp文件,添加发送邮件函数OnSend()的代码如下://发送邮件程序voidCMailServerDlg::OnSend(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(); //获取Edit控件中的字符串 m_strmailserver.TrimLeft(); m_strmailserver.TrimRight(); m_strrecipients.TrimLeft();m_strrecipients.TrimRight(); m_strsender.TrimLeft();m_strsender.TrimRight(); //判断Edit控件中的字符串是否有效if(m_strrecipients.GetLength()<3) { AfxMessageBox("请填写正确的收件人信箱"); return; } if(m_strsender.GetLength()<=0) { AfxMessageBox("请填写发件人邮箱"); return; } //发送邮件过程 try { //创建一个JMail对象,这样便可以利用其内容封装的基本属性和方法 jmail::IMessagePtrpMessage("JMail.Message"); //发件人邮箱 pMessage->From=(LPCTSTR)m_strsender; //发件人姓名 pMessage->FromName="我的名字"; //添加收件人 pMessage->AddRecipient((LPCTSTR)m_strrecipients,"",""); //优先级设置,1~5逐次降低,3为中级 pMessage->Priority=3; //编码方式设置,默认是iso-8859-1 pMessage->Charset="GB2312"; //主题 pMessage->Subject=(LPCTSTR)m_strsubject; //正文 pMessage->Body=(LPCTSTR)m_strbody; //开始发送 pMessage->Send((LPCTSTR)m_strmailserver,VARIANT_FALSE);pMessage.Release(); AfxMessageBox("发送成功!"); } //捕捉异常 catch(_com_errore) { CStringstrErr; strErr.Format("错误信息:%s\r\n错误描述:%s",(LPCTSTR)e.ErrorMessage(),(LPCTSTR)e.Description());AfxMessageBox(strErr); }}3、附件实现的代码:附件发送的实现;(1)首先在CMailServerDld类中定义几个对象。public:CStringstr;CStringtr;BOOLstrbool;_bstr_tbstr;(2)加载文件:voidCMailServerDlg::OnBtAddfile(){ //TODO:Addyourcontrolnotificationhandlercodehere CFileDialogcg(TRUE); if(cg.DoModal()==IDOK)strbool=true;elsestrbool=false; cg.DoModal();str=cg.GetPathName(); MessageBox(str);}(3)发送附件: bstr=str.AllocSysString();//CString类型转换成_bstr_t类型 if(strbool==true)//判断有没有打开附件 {_bstr_tbstrCID=pMessage->AddAttachment(bstr,VARIANT_TRUE,"");//开始发送(带附件) pMessage->Send((LPCTSTR)m_strmailserver,VARIANT_FALSE);pMessage.Release(); AfxMessageBox("发送成功(带附件)!"); } else { //开始发送(不带附件) pMessage->Send((LPCTSTR)m_strmailserver,VARIANT_FALSE);pMessage.Release(); AfxMessageBox("发送成功(不带附件)!"); }//捕捉异常 catch(_com_errore) { CStringstrErr; strErr.Format("错误信息:%s\r\n错误描述:%s",(LPCTSTR)e.ErrorMessage(),(LPCTSTR)e.Description());AfxMessageBox(strErr); }4、接受邮件程序代码:(1)往头文件StdAfx.h中添加JMail对象的声明,这样才能在整个程序中应用JMail对象.代码如下://显示指定JMail动态链接库#import"C:\jmail\jmail.dll"//定义程序中JMail对象的名称usingnamespacejmail;(2)头文件MailServer.h,利用ClassWizard类项导添加退出应用程序的函数ExitInstnace().源代码如下://Overrides //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(CMailServerApp) public: virtualBOOLInitInstance(); virtualintExitInstance(); //}}AFX_VIRTUAL(3)源文件MailRecieve.cpp,类CMailRecieveApp的实现文件.1)由于程序中应用了JMail组件,因此必须在InitInstance()函数中添加如下代码,进行应用程序的初始化.BOOLCMailRevieveApp::InitInstance(){ AfxEnableControlContainer(); ::CoInitialize(NULL);#ifdef_AFXDLL Enable3dControls(); //CallthiswhenusingMFCinasharedDLL……}2)应用程序时,在ExitInstance()函数中添加释放各变量的代码.//应用程序退出时intCMailRecieveApp::ExitInstance(){ //TODO:Addyourspecializedcodehereand/orcallthebaseclass returnCWinApp::ExitInstance(); ::CoUninitialize();}(4)MailRecieveDlg.h中,CMailRecieveDlg类的接口.1)在头文件MailRecieveDlg.h中,添加各控件的控件变量,如下表所示.控件控件变量IDC_EDIT_MAILSERVERm_strmailserverIDC_EDIT_MESSAGESm_strcltmessageslistIDC_EDIT_PASSWORDm_strpasswordIDC_EDIT_USERIDm_struseridIDC_EDIT_BODYm_strbody2)利用ClassWizard添加IDOK控件的ON_BN_CLICKED事件函数,添加List控件的LVN_ITEMCHANGE事件函数.代码如下:Protected://{{AFX_MSG(CMailServerDlg)……Afx_msgvoidOnRecieve();afx_msgvoidOnShowBody(NMHDR*Pnmhdr,lresult*pResult);//}}AFX_MSG……3)源文件MailRecieverDlg.cpp,类CMailRecieveDlg的实现文件.向MailServerDlg.cpp文件中添加初始化对话框函数OnInitDialog()的代码、OnRecieve()的代码和显示邮件正文函数OnShowBody()的代码:BOOLCMailRecieveDlg::OnInitDialog(){……//TODO:Addextrainitializationhere//初始化对话框的函数 //升级列表控件 ::SendMessage(m_ctlmessagelist.m_hWnd,LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT,LVS_EX_FULLROWSELECT); //显示控件列表 m_ctlmessagelist.InsertColumn(0,"发件人",LVCFMT_LEFT,120); m_ctlmessagelist.InsertColumn(1,"主题",LVCFMT_LEFT,350); m_ctlmessagelist.InsertColumn(2,"日期",LVCFMT_LEFT,100); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}://接收邮件函数voidCMailRecieveDlg::OnRecieve(){ //TODO:Addyourcontrolnotificationhandlercodehere//接受邮件的函数 UpdateData(); //格式化Edit控件中的字符串m_strmailserver.TrimLeft(); m_strmailserver.TrimRight(); m_struserid.TrimLeft(); m_struserid.TrimRight(); m_strpassword.TrimLeft(); m_strpassword.TrimRight(); //判断帐号口令是否存在 if(m_strmailserver.GetLength()<=0) { AfxMessageBox("邮件服务器不能为空"); return; } if(m_struserid.GetLength()<=0) {AfxMessageBox("帐号不能为空"); return; } //清空List控件列表 m_ctlmessagelist.DeleteAllItems(); //清空存放邮件正文的数组m_strBodyArray.RemoveAll(); //接受邮件 try { //创建新的JMail对象 jmail::IPOP3PtrpPOP3("JMail.POP3"); jmail::IMessagePtrpMessages; //设置链接服务器超时限制30s pPOP3->Timeout=30; //链接邮件服务器,110为POP3默认端口号 pPOP3->Connect((LPCTSTR)m_struserid,(LPCTSTR)m_strpassword,(LPCTSTR)m_strmailserver,110);//获取信件 pMessages=pPOP3->Messages; //已下载的邮件的实际个数(因为第0个ITEM是未用的,所以减一) longlCount=(pPOP3->Messages)->Count-1; if(lCount==0) AfxMessageBox("信箱为空"); else { jmail::IMessagePtrpMessage; //遍历每 for(longi=1;i<=lCount;i++) { pMessage=(pPOP3->Messages)->Item[i]; //信件的具体信息 _bstr_tbstrFrom=pMessage->From;_bstr_tbstrSubject=pMessage->Subject; _bstr_tbstrBody=pMessage->Body; COleDateTimeoleDate=pMessage->Date; //向List空间中添加信件信息 intnListItem=m_ctlmessagelist.InsertItem(i,(constchar*)bstrFrom

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论