发送电子邮件的程序实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

发送电子邮件的程序

一、程序界面设计

smtp电子邮件发送程序的用户界面

填入smtp服务器地址、邮箱用户名和口令,端口号是25,并填入发信人,发信地址填入你在该网站的免费邮箱地址。在对话框的右面填入发送电子邮件的相关信息,选择一个附件,然后点击“发送”按钮,程序会与服务器建立TCP连接,然后按照ESMTP协议发送ELHO命令,然后发送用户名和口令,经过验证,进入SMTP会话。通过命令交互,将邮件和附件发送出去,然后断开连接。在此过程中,右下方的多文本列表框(RichTextBox)会显示全部的会话信息。

现在的SMTP服务器与以前不一样,一般都要经过验证身份后,才为你提供传输邮件的服务,验证的方法有很多种,这里只实现了一种,仅仅为了说明问题。

程序实现的技术要点是:

1.运用Windows的消息驱动机制

2.通过状态转换来控制会话命令的发布顺序

3.实现了base64编码和译码。

二、创建应用程序的过程

1.使用MFC AppWizard创建应用程序框架

工程名是Smtp,应用程序的类型是基于对话框的,对话框的标题是“电子邮件发送客

户端程序”,需要Windows Sockets的支持,其它部分接受系统的默认设置就可以。向导自动为应用程序创建了两个类:

应用程序类:CSmtpApp,基类是CWinApp,对应的文件是Smtp.h和Smtp.cpp。

对话框类:CSmtpDlg,基类是CDialog,对应的文件是SmtpDlg.h和SmtpDlg.cpp。

2.为对话框添加控件

在程序的主对话框界面中添加相应的控件对象,并按照下表修改控件的属性。

3.定义控件的成员变量

为对话框中的控件对象定义相应的成员变量。

4.为控件对象添加事件响应函数

5.Base64编码和解码

创建一个普通的类,用来实现base64编码和解码。

6.创建CMySocket类

为了能够捕获并响应socket事件,应创建用户自己的套接字类,可利用类向导添加。

Class Type选择MFC Class,类名为CMySocket,基类是CAsyncSocket类,创建后对应的文件是MySocket.h和MySocket.cpp。在利用类向导为CMySocket类添加OnConnect,OnClose和OnReceive三个事件处理函数,并为它添加一般的成员函数和变量。可参看下一小节的程序代码。

7.手工添加包含语句以及事件函数和成员函数的代码

8.分阶段编译执行,进行测试

三、程序清单

1.CSmtpApp应用程序类

Smtp.h

Smtp.cpp

//CSmtpApp::InitInstance()

添加一句初始化多文本框控件的函数。

BOOL CSmtpApp::InitInstance()

{

if (!AfxSocketInit())

{

AfxMessageBox(IDP_SOCKETS_INIT_FAILED);

return FALSE;

}

AfxEnableControlContainer(); //MFC自动创建的代码

AfxInitRichEdit(); //用户自己添加的...............

}

2.CSmtpDlg对话框类

SmtpDlg.h

.................

#include "MySocket.h" //自己添加的包含语句

#include "Base64.h" //自己添加的包含语句

...............

class CSmtpDlg : public CDialog

{

// Construction

public:

void Display(LONG flag); //显示信息

void GetHeader(); //创建电子邮件的头部

CMySocket smtpSocket; //套接字类对象

CSmtpDlg(CWnd* pParent = NULL); // standard constructor

//类向导自动产生的窗口控件变量的声明

// Dialog Data

//{{AFX_DATA(CSmtpDlg)

enum { IDD = IDD_SMTP_DIALOG };

CString m_strAddr; //发信地址

CString m_strAttach; //附件

CString m_strBCC; //暗送

CString m_strCC; //抄送

CString m_strLetter; //信件内容

CString m_strSender; //发信人

CString m_strPassword; //口令

UINT m_nServPort; //端口

CString m_strReceiver; //收信

CString m_strServName; // SMTP服务器

CString m_strTitle; //主题

CString m_strUserName; //用户名

CString m_strInfo; //会话状态信息

//}}AFX_DATA .....................

//类向导自动生成的消息映射函数声明

//{{AFX_MSG(CSmtpDlg)

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

afx_msg void OnButtonView(); //点击“浏览”按钮时执行

virtual void OnOK(); //点击“发送“按钮时执行

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

private:

CBase64 coder; //进行Base64编码的变量

BOOL GetBody(LPSTR& pszBody, int& nBodySize);//构造邮件体};

..............

相关文档
最新文档