搜档网
当前位置:搜档网 › 使用VC自己动手编写加壳程序

使用VC自己动手编写加壳程序

使用VC自己动手编写加壳程序
使用VC自己动手编写加壳程序

使用VC自己动手编写加壳程序

阅读对象:想写壳的新手。高手掠过,本文仅限于写壳入门。

基本要求:了解VC++6.0基本使用方法;了解PE格式,不熟悉的地方能够通过查阅资

料弄懂;

(1) 生成界面,完成文件操作

主要内容:生成界面,完成打开文件对话框。

首先说一下写作原因。最初学习加壳技术,网上确实能找到一些源代码,但90%的没有注释,所以很多代码都看不懂。即使某个函数大体功能知道,但其中的小细节由于没有注释,也不知道作者的用途是什么,所以这一过程相当痛苦。当时对于我来说,一个简单的加壳程序也是相当复杂。有时候想修改他们的程序,但程序结构牵一发而动全身,不得不放弃。有些程序前面90%的代码都在做铺垫和打基础,而最后的10%是合并功能,往往我们在分析前面的90%中的20%就没有耐心了,因为铺垫太多,让我们感觉没有成就感,感觉不到那么多代码是干嘛的。所以本文在写作时,每一部分都会实实在在的实现一部分功能,让我们有些成就感,这样才有兴趣。写此文是给像我一样想写壳却无从下手的人一个参考。不过本人现在也是研究阶段,能力有限,文章一方面是总结一下自己,另一方面也希望和大家多多交流。

壳的理论我就不多说了。一开始就说一大堆理论同样会使学习失去兴趣,我就喜欢边动手边理论。开始吧。

打开VC++6.0,新建工程,工程名称“PEPacker”,选择“MFC

AppWizard(exe)”,下一步,选择基于对话框的应用程序。在对话框中删除默认的“确定”、“取消”按钮,还有默认的文本信息。如下图所示:

然后按F7组建(编译)程序,可以从IDE的提示窗口中看到是否生成成功,按CTRL+F5程序是能够正常运行的,不过是一个什么都没有的对话框。现在我们要添加元素了。

添加两个组框、一个编辑框、三个按钮、一个Rich编辑框。现在修改其属性。

在对话框上点击右键,选择“属性”,打开属性对话框,在对话框的左上角有个像钉子一样的图标,点击一下,这样属性对话框就会像钉子一样保持可见了,我们就不需要每修改一个控件属性的时候就点一下右键选择了。

修改属性后的控件ID和标题如下:

控件类型 ID值标题

组框请选择文件 IDC_STATIC

组框文件处理信息 IDC_STATIC

按钮选择文件 IDC_BUTTON_OPENFILE

按钮开始加壳 IDC_BUTTON_PACKING

按钮关于本程序 IDC_BUTTON_ABOUT

编辑框无 IDC_EDIT_FILEPATHNAME

Rich编辑框无 IDC_RICHEDIT_PROCINFO

对话框 IDD_PEPACKER_DIALOG PEPacker V1.0

设置好的界面如下图所示:

现在按F7编译,CTRL+F5运行一下,发现程序好没有动静。什么反应也没有,如果

把RichEdit删除掉,再编译,再运行就可以。

这个问题是由于RichEidt没有初始化引起的,微软的说法是要在APP的初始化函数中

加入初始化函数:AfxInitRichEdit()。那我们现在加入。

在classview视图中,展开CPEPackerApp类,双击InitInstance()函数,在AfxEnableControlContainer();后面添加代码 AfxInitRichEdit();,添加后的函数代码如下:

BOOL CPEPackerApp::InitInstance()

{

AfxEnableControlContainer();

AfxInitRichEdit();

// Standard initialization

// If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following

// the specific initialization routines you do not need.

此时再F7编译,CTRL+F5运行,就可以看到程序正常运行了。

再修改一下对话框的属性,右键,选择“属性”后,在“样式”标签中,勾选

上“最小化框

[N]”,这样对话框就可以最小化了。当然你还可以选择其它属性。

现在来添加成员变量。在编辑框上点击右键,选择“建立类向导……”,打开

类向导对话框,然后选择“Member Variables”标签。

注意Project:里面是否是PEPacker,Class name:里面是否是CPEPackerDlg,

然后在Control IDs:里面找到IDC_EDIT_FILEPATHNAME,双击。或者点击右边的“Add Varible...”按钮,在“Add Member Varible”对话框中添加成员变量。变

量名为"m_FilePathName”,Category选择"Value”,变量类型选择"CString”,

然后确定。用同样的方法给控件IDC_RICHEDIT_PROCINFO添加成员变量。变量名为

m_RichEditProcInfo,注意category选择Control,变量类型为CRichEditCtrl。

最后确定。

双击“选择文件”按钮,弹出添加程序函数对话框,函数名你

为:OnButtonOpenfile,我们确定即可,使用默认的,当然也可以修改。此时来到

了PEPackerDlg.cpp文件中,界面默认的位置是刚刚添加的函数编辑处。代码如下: void CPEPackerDlg::OnButtonOpenfile() {

// TODO: Add your control notification handler code here

}

此时在此函数中添加如下代码:代码我会作注释。

void CPEPackerDlg::OnButtonOpenfile() {

// TODO: Add your control notification handler code here

//设置文件过滤,默认打开哪些文件类型,最后“||”结束。

char szFilter[]="可执行文件(*.exe)|*.exe|全部文件(*.*)|*.*||"; //通过查阅MSDN,了解CFileDialog中构造函数的用法。

//第一个参数为TRUE,表示打开文件对话框;为FALSE,表示保存对话框。//其他详细参数说明见后面。

CFileDialog

dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter, NULL);

//通过模态对话框显示文件对话框

if (dlg.DoModal()==IDOK)

{

//获取文件路径

m_FilePathName=dlg.GetPathName();

//设置RICHEDIT内容

//将指针设置到编辑框最后

m_RichEditProcInfo.SetSel(-1,-1);

//替换编辑框最后的内容,实际上就是在最后添加内容。

m_RichEditProcInfo.ReplaceSel("文件路径:");

m_RichEditProcInfo.ReplaceSel(m_FilePathName);

//用获取的文件路径更新编辑框内容。

UpdateData(FALSE);

}

}

添加完成后,本次功能结束。编译运行即可,运行界面如下:

其中CFileDialog类的详细说明如下:

CFileDialog文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下:

CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL,

LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | O FN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = N ULL );参数意义如下:

bOpenFileDialog 为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。 lpszDefExt 指定默认的文件扩展名。

lpszFileName 指定默认的文件名。

dwFlags 指明一些特定风格。

lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。参数格式如:

"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|

*.xlc; *.xls|All Files (*.*)|*.*||";文件类型说明和扩展名间用 | 分

隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用|| 指明。 pParentWnd 为父窗口指针。

创建文件对话框可以使用DoModal(),在返回后可以利用下面的函数得到用户

选择: CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名如:c: est est1.txt

CString CFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名

如:test1.txt CString CFileDialog::GetExtName( ) 得到完整的文件扩展名,如:txt CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test1

POSITION CFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。

CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。 (2) 使用内存映射生成文件

主要内容:打开文件,使用内存映射生成文件。

本次要完成的任务是:点击“开始加壳”按钮,生成加壳后的文件,当然这是

假想加过壳,并没有加壳。实际上就是将文件改名,复制成另外一个文件,但又不同于复制。因为是先将文件创建内存映射,然后再通过映射指针写回文件。

本次的界面效果:

首先添加几个和文件名相关的成员变量。在classview中,双击PEPackerDlg 函数,在类的定义中申明成员变量:

public:

CString m_FilePathNamePacked; //加壳后的文件名

下面来添加“开始加壳”按钮的函数。在“开始加壳”按钮上双击,将出现新建函数的提示,确定即可。也可以点击工具栏上的“查看”菜单,选择“建立类向导”,选中“Message Maps”标签。Project:设置为PEPacker,Class name:设置为CPEPackerDlg,Object IDs选中IDC_BUTTON_PACKING,Messages:选中

BN_CLICKED,然后点击右边的“Add Function...”按钮,添加函数“OnButtonPacking”即可。

空的函数为:

void CPEPackerDlg::OnButtonPacking() {

// TODO: Add your control notification handler code here

}

现在在该函数中添加内容。代码部分我都做了注释,所以我就不多说了。

void CPEPackerDlg::OnButtonPacking() {

// TODO: Add your control notification handler code here

HANDLE hFile; //文件句柄

HANDLE hMapping; //文件映射句柄

LPVOID lpHeadBase; //创建映射的头指针

DWORD dwFileSize; //文件大小

DWORD dwBufferRead; //实际读取字节

//打开文件

hFile=CreateFile(m_FilePathName,GENERIC_READ,FILE_SHARE_READ,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

//如果文件打开失败,就弹出对话框,并返回。

if (hFile==INVALID_HANDLE_VALUE)

{

MessageBox("打开文件失败~","错误提示",MB_OK);

return;

}

//获取文件大小

dwFileSize=GetFileSize(hFile,NULL);

//设定加壳后的文件名,我采取了一个偷懒的简单方法。

//如果要严格做,需要获取文件路径,扩展名等等。

m_FilePathNamePacked=m_FilePathName.Left(m_FilePathName.GetLength() -4)+"_packed.exe";

//创建文件映射。如果对文件映射不了解,请自行查阅相关资料。

hMapping=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);

//如果创建映射失败,弹出对话框,并关闭文件句柄,然后返回。

if (hMapping==NULL)

{

MessageBox("创建文件映射失败~","错误提示",MB_OK);

CloseHandle(hFile); //关闭创建的文件句柄

return;

}

//将文件映射对象映射到当前应用程序的地址空间中

lpHeadBase=MapViewOfFile(hMapping,FILE_MAP_READ,0,0,0);

if (lpHeadBase==NULL)

{

MessageBox("文件映射地址失败~","错误提示",MB_OK);

CloseHandle(hMapping); //关闭映射句柄

CloseHandle(hFile); //关闭文件句柄

return;

}

//创建加壳后的文件句柄

hFile=CreateFile(m_FilePathNamePacked,GENERIC_READ|GENERIC_WRITE,F ILE_SHARE_READ|FILE_SHARE_WRITE,

NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

if (hFile==INVALID_HANDLE_VALUE)

{

MessageBox("生成文件失败~","错误提示~",MB_OK);

}

//写入文件

if (!WriteFile(hFile,lpHeadBase,dwFileSize,&dwBufferRead,NULL)) {

MessageBox("写入文件失败~","错误提示~",MB_OK);

//卸载文件映射,关闭文件句柄

UnmapViewOfFile(lpHeadBase);

CloseHandle(hMapping);

CloseHandle(hFile);

return;

}

//卸载文件映射,关闭文件句柄

UnmapViewOfFile(lpHeadBase);

CloseHandle(hMapping);

CloseHandle(hFile);

//在编辑框中显示信息

m_RichEditProcInfo.ReplaceSel("文件加壳完成~\r\n");

MessageBox("创建文件成功~","成功提示",MB_OK);

}

针对于上次还要修改的地方:

打开对话框资源,修改RichEdit的属性,勾选“多行”和“自动垂直滚动”,去掉“自动水平滚动”。

在OnButtonOpenfile() 函数中,在代码

//替换编辑框最后的内容,实际上就是在最后添加内容。

m_RichEditProcInfo.ReplaceSel("文件路径:");

m_RichEditProcInfo.ReplaceSel(m_FilePathName);

的后面添加:

m_RichEditProcInfo.ReplaceSel("\r\n");

(3)检测文件格式

主要内容:检测文件格式(是否为PE格式的EXE文件)

本次的主要内容为检测文件是否为PE格式,且是否为EXE文件。DLL等文件也是PE格式,但其加壳的一些数据处理方式不一样,最明显的一个差别就是DLL文件需要重定位。本系统现在暂时只处理EXE可执行文件。

截图效果:(在RichEdit中多了个文件格式提示)

首先添加一个成员函数:IsPe,用来判断文件格式。如果满足就返回TRUE,否则返回FALSE。

在classview视图中,找到CPEPackerDlg类,在其上面点击右键,选择“Add member Function...” ,函数类型为BOOL,函数描述为IsPE(HANDLE hFile),Access为public,然后确定,编辑此函数。

//检测文件是否是PE可执行文件格式

BOOL CPEPackerDlg::IsPE(HANDLE hFile) {

WORD wTemp; //暂存读取的字节

DWORD dwBufferRead; //实际读取的字节数

DWORD dwOffset; //PE头偏移位置

DWORD dwOEP; //程序OEP

//读取MZ标志

SetFilePointer(hFile,0,NULL,FILE_BEGIN);

ReadFile(hFile,&wTemp,2,&dwBufferRead,NULL);

//因为二进制目标文件反着顺序存储,所以要反过来判断。

if (wTemp!='ZM')

{

return FALSE;

}

//读取PE头位置

SetFilePointer(hFile,0x3C,NULL,FILE_BEGIN); ReadFile(hFile,&dwOffset,4,&dwBufferRead,NULL);

//读取PE头信息

SetFilePointer(hFile,dwOffset,NULL,FILE_BEGIN); ReadFile(hFile,&wTemp,2,&dwBufferRead,NULL);

//判断是否为PE,同样要反着判断。

if (wTemp!='EP')

{

return FALSE;

}

//获取文件OEP

SetFilePointer(hFile,dwOffset+0x28,NULL,FILE_BEGIN);

ReadFile(hFile,&dwOEP,4,&dwBufferRead,NULL);

//如果OEP为0。

if (!dwOEP)

{

return FALSE;

}

//获取文件特征,判断是exe还是dll文件。

SetFilePointer(hFile,dwOffset+0x16,NULL,FILE_BEGIN);

ReadFile(hFile,&wTemp,2,&dwBufferRead,NULL);

if (wTemp & 0x2000 !=0)

{

return FALSE;

}

return TRUE;

}

最后在OnButtonPacking函数中,运用此函数。将此函数添加在打开文件CreateFile和创建映射之间。

如果文件格式正确,就创建映射;否则,就返回。添加后的代码为:

…………………………

//如果文件打开失败,就弹出对话框,并返回。

if (hFile==INVALID_HANDLE_VALUE)

{

MessageBox("打开文件失败~","错误提示",MB_OK);

return;

}

/////////////////第三次加的内容

/////////////////////////////////////////////

//判断文件格式

if (!IsPE(hFile))

{

m_RichEditProcInfo.ReplaceSel("错误提示:文件不是PE格式~\r\n");

MessageBox("文件不是PE可执行文件","错误提示~",MB_OK);

return;

}

//////////////////////////////////////////////////////////////////// //////

//获取文件大小

dwFileSize=GetFileSize(hFile,NULL);

//设定加壳后的文件名,我采取了一个偷懒的简单方法。

//如果要严格做,需要获取文件路径,扩展名等等。

m_FilePathNamePacked=m_FilePathName.Left(m_FilePathName.GetLength() -4)+"_packed.exe";……………………………………

(3) 通过分配虚拟内存生成文件

主要内容:给文件分配虚拟内存并载入内存,然后输出加壳后文件。

将PE文件载入内存后再操作有三种方法。第一是通过文件映射的基址,其内容在第二节中已经应用并实现。第二是获取获取文件大小,然后分配相应大小的内存。第三是模拟PE文件的加载机制,根据PE文件的镜像大小分配相应大小的内

存,然后将相应的区块载入到对应的虚拟地址空间中。本次内容将使用第三种方式加载文件到内存。

由于PE文件在运行时,对文件中数据的读取都是通过RVA(相对虚拟地址)进行的,如果采用第一种或者第二种方式加载到内存,那么当读取数据的时候,还需要将RVA转换成Offset(文件偏移),这种转换虽然说不麻烦,但如果需要转换的地方较多,有时也会出错,所以本系统的加壳也将采用第二种方式加入到内存。

载入内存用先通过VirtualAlloc函数分配虚拟内存空间,然后通过ReadFile 读入到内存。根据PE文件的加载机制,PE文件会按照区段进行载入,每个区段的虚拟地址在区段表中都有说明。

最后的效果图。

首先添加两个成员函数:MemAlloc和MemAllocFree,在class view视图中的CPEPackerDlg类上点击右键,选择“add member function...”。函数类型和说明分别如下:

BOOL MemAlloc(HANDLE hFile); //分配内存

void MemAllocFree(); //释放内存

然后再添加几个成员变量,在class view视图中的CPEPackerDlg类上点击右键,选择“add member variables...” 。变量类型和名称如下,Access都选择public。定义的都是指针类型变量。

LPVOID lpVirtualtAlloc; //内存分配指针

PIMAGE_DOS_HEADER pDosHeader; //DOS头指针

PIMAGE_NT_HEADERS pNtHeader; //NT头

PIMAGE_OPTIONAL_HEADER pOptionalHeader; //可选头指针

PIMAGE_SECTION_HEADER pSectionHeader; //区块表指针

此时我们把两个编辑框的属性设置为只读。第一个编辑框设置为只读后,获取文件路径时方便点,如果用户不是通过按钮来选择文件,而是手动输入文件路径,那么就还需要一个判断和获取文件。所以为了省去这种麻烦,我们干脆设置为只读算了。第二个编辑框本来只输出信息,不需要修改,所以设置为只读。

设置方法。在资源视图中打开该对话框,然后在编辑框的属性中选择“样式”标签,最后面有个“只读”复选框,勾上就行了。

编写代码。MemAlloc函数的代码如下,我都做了注释,就不多说了。

//文件分配虚拟内存

BOOL CPEPackerDlg::MemAlloc(HANDLE hFile) {

DWORD dwSizeOfImage; //映像大小

DWORD dwSizeOfHeaders; //文件头大小

DWORD dwBufferRead; //文件实际读入大小

DWORD dwOffset; //PE头偏移

char szBuffer[512]; //调试用

DWORD dwNumOfSections; //区段表个数

DWORD i;

//获取文件的映像大小,从PE头中读取。

SetFilePointer(hFile,0x3C,NULL,FILE_BEGIN);

ReadFile(hFile,&dwOffset,4,&dwBufferRead,NULL); //读取PE头位置

SetFilePointer(hFile,dwOffset+0x50,NULL,FILE_BEGIN);

ReadFile(hFile,&dwSizeOfImage,4,&dwBufferRead,NULL);//读取文件映像大小

SetFilePointer(hFile,dwOffset+0x54,NULL,FILE_BEGIN);

ReadFile(hFile,&dwSizeOfHeaders,4,&dwBufferRead,NULL);//读取文件头大小

sprintf(szBuffer,"文件头:%lx,文件头大小:%lx,文件映像大小:%lx\r\n", dwOffset,dwSizeOfHeaders,dwSizeOfImage);

m_RichEditProcInfo.ReplaceSel(szBuffer);

//分配虚拟内存

//MEM_RESERVE保留分配

//MEM_COMMIT表示提交分配

//申请内存的同时提交分配,具体用法可以参考MSDN。

lpVirtualtAlloc=VirtualAlloc(NULL,dwSizeOfImage,MEM_RESERVE|MEM_COM MIT,PAGE_READWRITE);

//如果分配失败

if (lpVirtualtAlloc==NULL)

{

return FALSE;

}

//将文件读入到内存中

//首先读取文件头

SetFilePointer(hFile,0,NULL,FILE_BEGIN);

ReadFile(hFile,lpVirtualtAlloc,dwSizeOfHeaders,&dwBufferRead,NULL);

//获取PE文件头相关指针

pDosHeader=(PIMAGE_DOS_HEADER)lpVirtualtAlloc;

pNtHeader=(PIMAGE_NT_HEADERS)(pDosHeader-

>e_lfanew+(DWORD)pDosHeader);

pOptionalHeader=(PIMAGE_OPTIONAL_HEADER)(&pNtHeader->OptionalHeader);

//IMAGE_FIRST_SECTION是VC下定义的一个宏,用来获取区段表的头指针

pSectionHeader=IMAGE_FIRST_SECTION(pNtHeader);

//然后分区块进行读入

dwNumOfSections=pNtHeader->FileHeader.NumberOfSections;

for (i=0;i

{

//将指针设定到每个区块的开始

SetFilePointer(hFile,(pSectionHeader+i)-

>PointerToRawData,NULL,FILE_BEGIN);

//根据每个区块的原始大小读入到相应的虚拟地址中去。

ReadFile(hFile,(LPVOID)((DWORD)lpVirtualtAlloc+(pSectionHeader+i)-

>VirtualAddress),(pSectionHeader+i)->SizeOfRawData,&dwBufferRead,NULL);

}

return TRUE;

}

第二个函数,MemAllocFree主要是释放分配的内存。

void CPEPackerDlg::MemAllocFree()

{

//释放分配的虚拟内存

VirtualFree(lpVirtualtAlloc,0,MEM_DECOMMIT);

VirtualFree(lpVirtualtAlloc,0,MEM_RELEASE); }

最后在主函数OnButtonPacking中调用分配函数,及释放函数。

…………………………………………………………………………………………

/////////////////第三次加的内容

/////////////////////////////////////////////

//判断文件格式

if (!IsPE(hFile))

{

m_RichEditProcInfo.ReplaceSel("错误提示:文件不是PE格式~\r\n");

MessageBox("文件不是PE可执行文件","错误提示~",MB_OK);

return;

}

//////////////////////////////////////////////////////////////////// //////

//////////第四次内容。分配内存,并载入内存

////////////////////////////////////////////

if (!MemAlloc(hFile))

{

m_RichEditProcInfo.ReplaceSel("错误提示:文件加载到内存失败~\r\n");

MessageBox("文件加载到内存失败~","错误提示~",MB_OK);

电子邮件试题及答案

《信息技术基础》(电子邮件部分) 强化练习 1.如果E-mail地址是wang@https://www.sodocs.net/doc/ce18709928.html,,那么用该邮箱地址发送邮件范围:()A.只能是云南 B.只能是中国 C.只能是教育部门 D.可以是全世界 2.某同学以myname为用户名在新浪网(https://www.sodocs.net/doc/ce18709928.html,)注册的电箱地址应该是:() A myname@https://www.sodocs.net/doc/ce18709928.html, B.https://www.sodocs.net/doc/ce18709928.html, C.myname.sina@com D.https://www.sodocs.net/doc/ce18709928.html,@myname 3.使用WEB方式(直接在网站上)收发电子邮件时,以下描述错误的是:() A.不用设置SMTP服务域名 B.不用设置POP3服务域名 C.不用输入账号和密码登录 D.可以在附件中插入图片文件 4.在撰写邮件时,在收件人对话框的“收件人”栏中:() A.只能输入一个人的收件地址 B.只能输人多个人的收件地址 C.既可以输入一个人的收件地址又可以输人多个人的收件地址 D.只能输入收件人的姓名 5.要将一封电子邮件同时发送给几个人,可以在收件人栏中输入他们的地址,并用()分隔。 (A)”(B)。(C),(D) / 6.关于发送电子邮件,下列说法中正确的是()。 (A)你必须先接入Internet,别人才可以给你发送电子邮件 (B)你只有打开了自己的计算机,别人才可以给你发送电子邮件 (C)只要有E-Mail地址,别人就可以给你发送电子邮件 (D)别人只要接入了Internet,就可以给你发送电子邮件 7.要给某人发电子邮件,必须知道他的()。 (A)电话号码(B)家庭地址(C)姓名(D)E-Mail地址 8.在发送电子邮件时,在邮件中()。 (A)只能插入一个图形附件(B)只能插入一个声音附件 (C)只能插入一个文本附件(D)可以根据需要插入多个附件 9.电子邮件从本质上来说就是()。 (A)浏览(B)电报(C)传真(D)文件 10.小明写了一份研究性学习结题报告电子文档,投稿前就稿子审阅修订问题需要与身在国外留学的叔叔进行较长时间的交流。你认为小明应该采用的较合理的信息交流方式是:() (A)电报 (B)电话 (C)书信 (D)电子邮件 11.下列主要用于电子邮件收发和管理的软件是() (A)FrontPage (B)Outlook Express (C)ACDSee (D)WinRAR 12.接收电子邮件的协议是() (A)SMTP (B)HTTP (C)POP3 (D)TCP/IP 13.在电子邮件中所包含的信息() (A)只能是文字信息 (B)只能是文字和图形图像信息 (C)只能是文字与声音信息 (D)可以是文字、声音和图形图像信息 14.把电子邮件发送到收件人的电子信箱中,所采用的邮件传输协议是()

电子邮件的收发

电子邮件的收发 【教材分析】 本节内容是高等教育出版社出版的中等职业教育国家规划教材——《计算机应用基础》第四章第二节,即时通讯软件和邮件收发都是现代人所需掌握的基本技能,特别是QQ的普及,很多人都越来越多地依赖它来交流信息,沟通感情。教材中没有对QQ过多介绍,反而指向MSN,需要向学生说明。同时,教材中除了介绍在web上收发邮件外,还介绍用邮件客户端软件管理邮件,深化了对邮箱管理的操作。 【教材处理】 本节的实际操作性还是比较强的,但是由于学生对邮箱和qq都已很熟悉,如果设计不好,很难吸引学生的注意力,进而把课堂深化下去。同时,本节的理论知识也是很重要的一部分,有些比较抽象,不好理解。因此对教材作如下处理: 1、情景引入尤为重要,创设学生身边的情境,让学生带着问题去思考,在情境中不知不觉地领悟新知。 2、旧瓶装新酒,适当扩充软件知识和深化知识点。 3、让学生学会比较,在比较中建构自己的知识体系和技能。 【学情分析】 教学对象:职高一年级学生 基本情况:学生已经在初中阶段学过信息技术这一课程再加上qq的普及,对本节内容已有初步的认识。 电子邮件对于学生来说,并不是第一次使用。部分学生可能都曾用过电子邮箱发送过电子邮件。但从平时的交流中,发现他们只会登录web页面发信、收信,对电子邮箱中的相关设置和发送原理并不是很了解。而对于用邮件客户端软件,如Outlook Express之类软件,基本上从来没有尝试过。因此,如何利用邮件客户端软件收发电子邮件,是本节的主要内容之一。 网络注册已经相当普遍,如何保障个人信息的安全,也是眼前要解决的一个问题。在电子邮件的收发过程中,除了对电子邮箱中的选项进行相关设置外,设定一定等级的密码是其中的一个方法。学生平时常常会忽略这点,设定的密码比较简单。所以在本课中也有相关的网络安全意识教育。

实验六 电子邮件收发及客户端软件

实验六电子邮件收发及客户端软件配置 【实验目的】 让学生了解电子邮件传输信息的方法,熟练使用基于Web的电子邮件的收发,并掌握电子邮件客户端软件的配置方法及其基本应用。 【实验内容】 1.Web电子邮件的收发。 2.配置电子邮件客户端软件(Microsoft Outlook Express和Foxmail)。 3.电子邮件客户端软件的基本应用。 【预备知识】 (一)电子邮件基础知识 电子邮件(Electronic Mail)又称E-mail,它是用户或用户组之间通过计算机网络收发信息的服务。用户可以使用电子邮件发送或接收文字、图像和语音等多种形式的信息。目前电子邮件已成为网络用户之间快速、简便、可靠且成本低廉的现代通信手段,也是Internet 上使用最广泛、最受欢迎的服务之一。 1.电子邮箱 电子邮箱由提供电子邮件服务的机构为用户建立,在邮件服务器上建一个用户帐号并为用户开辟一个存储空间,又称E-mail地址。E-mail地址格式为:用户名@邮件服务器主机名。例如:zhujun@https://www.sodocs.net/doc/ce18709928.html,。 2.电子邮件工作原理 电子邮件与普通邮件有类似的地方,发信者注明收件人的E-mail地址,发送方服务器把邮件传到收件方服务器,收件方服务器再把邮件发到收件人的邮箱中。如图6-1所示。 图6-1 电子邮件收发示意图 在电子邮件的实际工作过程中,收发邮件一般是双向的,即发件人和收件人、发件服务器和收件服务器的角色是相互转换的。 电子邮件系统由以下几部分组成(见图6-2): z MUA(Mail User Agent):邮件用户代理,帮助用户读写邮件。 z MTA(Mail Transport Agent):邮件传输代理,负责把邮件由一个服务器传到另一个服务器。 1

(完整版)VC6.0MFC串口通信编写全过程

其于MFC的串口调试助手编辑过程 一、新建 打开VC6.0 文件新建工程MFC AppWiard(exe) 位置(选择保存工程位置)工程名称(输入工程名XXXX)确定选择基本对话框下一步下一步下一步选择(CXXXXDlg)完成确定在生成的基本对话框内将不需要按钮及提示框(自动生成的“确定”“取消”及提示框)删除或修改使用,至此基本框架完成如下图: 二、往生成的基本框架中添加控件 1、因为控件列表框内没有串口通信用到的通信控件,所以要先添加到控件列表框内再 将控件添加到基本框内使用,步骤如下: 菜单栏工程添加到工程Components and controls…Registered ActiveX Controls 选择“Microsoft Communications Control, version 6.0”Insert 确定OK 关闭此子窗口完成添加操作标志如上图所示。 2、将刚才添加添加到控件列表框内的串口控件添加到基本框架内 点击控件列表框内的串口控件,此时光标变为“十”形,在基本框架内随意划取一矩形区域,即可以添加串口控件,不需要修改此控件的大小及位置,因为程编译运行后此控件是看不到的,步骤结果如下图:此控件(标志)是下面步骤添加进来的串口控件 基本框架

3、继续往基本框架内添加用于编辑发送数据的输入编辑框及输出编辑框,同理选择控 件列表框内的“编辑框控件”,以相同的操作即可添加两个编辑窗口及一个按纽控件如 下图所示: 选择其中任 意一个作为 输入编辑框 及输出编辑 框 这两个窗口需要修改大小及位置,因为程序运行后将会显示而串口通信控件则不显示, 上图是运行后的效果。 4、对以上四个控件编程步骤如下: a、右击串口通信控件建立类向导Member variables Control IDS中选 择IDC_MSCOMM1 add variable…Member variable name中输入控件变量名 m_ctrlComm(变量名可以随意选取,但程序中应与所取变量名一致)OK 确 定

我怎样使用电子邮件客户端(Outlook)程序收发邮件

我怎样使用电子邮件客户端程序(如Outlook)来发送和阅读邮件? 你可以使用支持POP 的客户端或者设备(例如Outlook 或Foxmail)收发你的邮件。 请配置你的电子邮件客户端,以下载企业邮箱邮件。要了解如何进行配置,请单击你的电子邮件客户端名称: Outlook 设置 请手动配置你的客户端: 1. 首先,启动Outlook Express。打开“Internet 连接向导”;首先输入你的“显示名”,如:殷大微。此姓名将出现在你所发送邮件的“发件人”一栏。,然后单击“下一步”按钮; 2. 在“Internet 电子邮件地址”窗口中输入你的邮箱地址,如:username@16 https://www.sodocs.net/doc/ce18709928.html,,再单击“下一步”按钮;

3. 在“接收邮件(pop、IMAP或HTTP)服务器:”字段中输入https://www.sodocs.net/doc/ce18709928.html,。在“发送邮件服务器(SMTP):”字段中输入https://www.sodocs.net/doc/ce18709928.html,,然后单击“下一步”; 4.在“帐户名:”字段中输入你的163免费邮用户名(仅输入@ 前面的部分)。在“密码:”字段中输入你的邮箱密码,然后单击“下一步”。

5.点击“完成”。 6.在Internet 帐户中,选择“邮件”选项卡,选中刚才设置的帐号,单击“属性”。

7.在属性设置窗口中,选择“服务器”选项卡,勾选“我的服务器需要身份验证”。 8.点击“确定”。 其它设置补充说明:

如果你希望在服务器上保留邮件副本,则在帐户属性中,单击“高级”选项卡。勾选“在服务器上保留邮件副本”。此时下边设置细则的勾选项由禁止(灰色)变为可选(黑色)。 恭喜!你已经完成Outlook 客户端配置,可以收发邮件了。

电子邮件收发系统的设计与实现【开题报告】

开题报告 通信工程 电子邮件收发系统的设计与实现 一、课题研究意义及现状 伴随中国互联网的发展和政府、企业信息化的进程,电子邮件系统越来越占据着举足轻重的地位。电子邮件系统在国内的应用,经历了从科研机构的专用工作方式到步入寻常百姓的日常生活,到为政府和诸多企业认可,成为人们工作、生活“标准配置”的发展历程。电子邮件系统作为整套应用解决方案,必然涉及到Internet接入网络、电子邮件系统应用软件、数据库、服务器设备、存储备份、集群、安全加密等相关技术,其中电子邮件系统软件是整个系统的核心,其技术指标对整个系统的功能和性能起到决定性作用。 随着我国Internet网络基础设施的不断改善和互联网应用的日益普及,以及人们对电子邮件服务的功能、性能要求的日益提升,电子邮件的应用也必将越来越深入和专业化。在技术上,电子邮件系统在国内的发展经历了从传统电子邮件系统的CtoC(Copy to China),到电子邮件服务提供商组织技术力量开发完善自己的邮件系统,再到顺应市场需求,逐渐产生满足不同目标用户电子邮件需求的商业化电子邮件系统成熟产品的不断发展过程。早期,国外一些可免费下载使用的电子邮件系统(如Sendmail、Qmail等)曾被国内用户广泛采用。这些系统可满足一定用户数的基本邮件收发需求,但随着用户数规模的扩大和本地化、专业化电子邮件功能、性能需求的日益提升,这些免费“舶来品”的缺陷日益突出:系统性能随着用户数的增多急剧下降;可靠性低,收发邮件不稳定甚至丢失邮件;安全性差,易被黑客攻击,商业机密易泄露;中文处理经常出现问题,代码之间难转换等。这些传统电子邮件系统的缺陷促使了国内自主开发、自主品牌的电子邮件系统的诞生。 二、课题研究的主要内容和预期目标 主要内容: 本课题研究的是一个电子邮件收发系统,以C++Builder 6.0为开发环境。 预期目标: 设计一款简单的电子邮件系统,具备一般电子邮件的基本功能。能进行邮件的收发, 发送附件,邮件杀毒,垃圾邮件过滤,来邮件手机短信提醒等功能。 三、课题研究的方法及措施 关于C++ builder C++ builder是Inprise公司(原Borland公司)1998年推出的,面向对象的32位Windows程序设计开发工具。C++ builder不仅继承了Delphi使用简便、功能强大、效率高等特点,而且它还结合看

高中信息技术 第四章 第五节 接收和发送电子邮件教案 浙教版

课题:接收和发送电子邮件 教学时间:授课班级: 教学目标: 1、了解电子邮件的接收和发送 2、学习outlook Express的使用 3、掌握接收和发送电子邮件的方法 教学重点: 制作电子邮件;接收和发送电子邮件;附加文件的邮件 教学难点:完整的收件人地址;电子邮件是否发出 教学过程: 一、课程导入: 在上一节课,我们已经成功地申请了免费的电子邮箱,看到了许多漂亮的网站,下载了部分软件和文章。我们怎样把这些信息告诉给同学、朋友和亲人?(打电话、写信、电报、传真、传呼、发电子邮件。)在这当中,那一种方式既快捷又经济呢?电子邮件。好!怎样接收和发送电子邮件呢?这是我们今天要学习的内容。板书:接收和发送电子邮件。要发电子邮件,我们必须接通互联网。因此,在学校里,老师接通互联网。在家里,我们自己拨号上网。当这一条件具备了时,才能收发电子邮件。接收和发送电子邮件,既可用网站的免费邮件系统,也可用专用软件outlook等. 二、新课教授: 一)、基本知识 1、启动outlook Express. 2、认识outlook Express界面. 1)、文件夹窗口. 2)、邮件主题列表窗口. 3)、邮件预览窗口. 二)、发送电子邮件 1、制作电子邮件 1)、单击"新邮件"按钮. 2)、认识新邮件窗口. ①收件人的格式是:用户名@邮件服务器域名例如:teacher@https://www.sodocs.net/doc/ce18709928.html, jzl@https://www.sodocs.net/doc/ce18709928.html,.如果同一邮件要发送给多个人,可用逗号或分号把邮箱地址隔开. ②"抄送"和"密件抄送"的格式和第一条一样. ③在"主题"里,可以自己命名.例如:信件、通知、hello等 ④在"正文"中,书写我们表达的内容. 3)、附加文件. 方法:插入→附件→选文件名→打开或单击"附加"按钮 备注:附加其它软件编辑的作品,如文本、图片、软件等。 收件人方面必须要有该软件. 4)、保存电子邮件.

VC++编写简单串口上位机程序

VC++编写简单串口上位机程序 2010年4月13日10:23:40 串口通信,MCU跟PC通信经常用到的一种通信方式,做界面、写上位机程序的编程语言、编译环境等不少,VB、C#、LABVIEW等等,我会的语言很少,C语言用得比较多,但是还没有找到如何用C语言来写串口通信上位机程序的资料,在图书管理找到了用VC++编写串口上位机的资料,参考书籍,用自己相当蹩脚的C++写出了一个简单的串口上位机程序,分享 一下,体验一下单片机和PC通信的乐趣。 编译环境:VC++6.0 操作系统:VMWare虚拟出来的Windows XP 程序实现功能: 1、 PC初始化COM1口,使用n81方式,波特率57600与单片机通信。PC的COM口编号可以 通过如下方式修改: 当然也可以通过上位机软件编写,通过按钮来选择COM端口号,但是此次仅仅是简单的例程,就没有弄那么复杂了。COM1口可用的话,会提示串口初始化完毕。否则会提示串口已经打开Port already open,表示串口已经打开,被占用了。 2、点击开始转换,串口会向单片机发送0xaa,单片机串口中断接收到0xaa后启动ADC转换一次,并把转换结果ADCL、ADCH共两个字节的结果发送至PC,PC进行数值转换后在窗口

里显示。(见文章末尾图) 3、为防止串口被一只占用,点击关闭串口可以关闭COM1,供其它程序使用,点击后按钮 变为打开串口,点击可重新打开COM1。 程序的编写: 1、打开VC++6.0建立基于对话框的MFC应用程序Test,

2、在项目中插入MSComm控件:工程->增加到工程->Components and Controls->双击Registered ActiveX Controls->选择Microsoft Communications Control, version 6.0->Insert,按默认值添加,你会发现多了个电话图标,这是增加后串口通信控件。

电子邮件协议综述

常见的电子邮件协议有以下几种:SMTP(简单邮件传输协议)、POP3(邮局协议)、IMAP (Internet邮件访问协议)。这几种协议都是由TCP/IP协议族定义的。SMTP(Simple Mail Transfer Protocol):SMTP主要负责底层的邮件系统如何将邮件从一台机器传至另外一台机器。POP(Post Office Protocol):目前的版本为POP3,POP3是把邮件从电子邮箱中传输到本地计算机的协议。IMAP(Internet Message Access Protocol):目前的版本为IMAP4,是POP3的一种替代协议,提供了邮件检索和邮件处理的新功能,这样用户可以完全不必下载邮件正文就可以看到邮件的标电子邮件 题摘要,从邮件客户端软件就可以对服务器上的邮件和文件夹目录等进行操作。IMAP协议增强了电子邮件的灵活性,同时也减少了垃圾邮件对本地系统的直接危害,同时相对节省了用户察看电子邮件的时间。除此之外,IMAP协议可以记忆用户在脱机状态下对邮件的操作(例如移动邮件,删除邮件等)在下一次打开网络连接的时候会自动执行。 除了我们常见的通用协议SMTP、POP3、IMAP ,现在有一些邮件系统厂商自主研发了私有协议,比如去年Coremail就研发了了私有协议,这个私有协议达到了邮件加速的目的,邮件发送接收比使用普通协议快了一倍,不过既然是私有协议,目前只能使用在同一个系统中,比如网易邮箱和139手机邮箱都用了Coremail邮件系统,他们之间互相收发邮件比收发其它系统的邮件要快一半。 这种私有协议一般是实力雄厚、终端用户多的厂商才具有研发的意义。 什么是POP 大家一听这个POP,读起来有点像是中文中的泡泡,其实这是一个英文术语的缩写。POP 的全称是Post Office Protocol,即邮局协议,用于电子邮件的接收,它使用TCP的110端口。现在常用的是第三版,所以简称为POP3。POP3仍采用Client/Server工作模式,Client被称为客户端,一般我们日常使用电脑都是作为客户端,而Server(服务器)则是网管人员进行管理的。举个形象的例子,Server(服务器)是许多小信箱的集合,就像我们所居住楼房的信箱结构,而客户端就好比是一个人拿着钥匙去信箱开锁取信一样的道理。 POP在网络模型中的层次 大家都知道网络是分层的,而这个分层就好比是一个企业里的组织结构一样。在日常使用电脑过程中,人操作着电脑,人就好比是指挥电脑对因特网操作的首席执行官。当我们打开Foxmail这个邮件软件收取邮件时,Foxmail这个软件就会调用TCP/IP参考模型中的应用层协议—POP协议。 应用层协议建立在网络层协议之上,是专门为用户提供应用服务的,一般是可见的。如利用FTP(文件传输协议)传输一个文件请求一个和目标计算机的连接,在传输文件的过程中,用户和远程计算机交换的一部分是能看到的。而这时POP协议则会指挥下层的协议为它传送数据服务器,最后Foxmail通过一系列协议对话后成功将电子邮件保存到了Foxmail 的收件箱里。TCP/IP参考模型是Internet的基础。和OSI的7层协议比较,TCP/IP参考模型中没有会话层和表示层。通常说的TCP/IP是一组协议的总称,TCP/IP实际上是一个协议族(或协议包),包括100多个相互关联的协议,其中IP(Internet Protocol,网际协议)是网络层最主要的协议;TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)是传输层中最主要的协议。一般认为IP、TCP、UDP是最根本的三种协议,是其它协议的基础。 相信读者了解TCP/IP框架之后,一定会对各层产生一定的兴趣,不过我们对于这个模型的理解也是一步步来的。在这里,我们首先只要知道相应的软件会调用应用层的相应协议,比如Foxmail会调用POP协议,而IE浏览器则会调用DNS协议先将网址解析成IP地址。在

基于SMTP协议电子邮件收发系统的设计

目录 1 引言 (1) 1.1 电子邮件介绍 (1) 1.2 开发背景 (2) 1.3 开发环境及运行环境 (2) 2 软件架构及系统用例图 (3) 2.1 系统架构 (3) 2.2 系统总体用例 (3) 2.4 发送邮件类 (4) 2.5 附加小功能类 (4) 3 SMTP协议的研究 (4) 3.1 SMTP协议简介及工作原理 (5) 3.2 SMTP协议的命令和应答 (6) 3.2.1 SMTP协议的命令 (6) 4 RFC822 (14) 4.1 RFC822简单介绍 (14) 4.2 信件的头部 (14) 5 命名控件MailSend (20) 5.1 发送邮件类SmtpMail (20) 5.2 AddExtra类 (27) 5.2.1 调用Windows API 所需的命名空间 (28) 5.2.3 在程序中具体的使用 (28) 6 软件运行时的界面 (29) 6.1 新建邮件帐号 (29) 7 系统测试 (32) 7.1 同一SMTP服务器发送邮件的测试 (32) 7.2 利用不同的SMTP服务器发送邮件的测试 (32) 8 结论 (34) 第I 页共II 页

参考文献 (35) 第II 页共II 页

1 引言 1.1 电子邮件介绍 电子邮件(简称E-mai1)又称电子信箱、电子邮政,它是—种用电子手段提供信息交换的通信方式。它是全球多种网络上使用最普遍的一项服务。这种非交互式的通信,加速了信息的交流及数据传送,它是—个简易、快速的方法。通过连接全世界的Internet,实现各类信号的传送、接收、存贮等处理,将邮件送到世界的各个角落。到目前为止,可以说电子邮件是Internet资源使用最多的一种服务,E-mai1不只局限于信件的传递,还可用来传递文件、声音及图形、图像等不同类型的信息。 电子邮件不是一种“终端到终端”的服务,是被称为“存贮转发式”服务。这正是电子信箱系统的核心,利用存贮转发可进行非实时通信,属异步通信方式。即信件发送者可随时随地发送邮件,不要求接收者同时在场,即使对方现在不在,仍可将邮件立刻送到对方的信箱内,且存储在对方的电子邮箱中。接收者可在他认为方便的时候读取信件,不受时空限制。在这里,“发送”邮件意味着将邮件放到收件人的信箱中,而“接收”邮件则意味着从自己的信箱中读取信件,信箱实际上是由文件管理系统支持的—个实体。因为电子邮件是通过邮件服务器(mai1 server)来传递档的。通常mail server是执行多任务操作系统UNIX的计算机,它提供24小时的电子邮件服务,用户只要向mail server管理人员申请—个信箱账号,就可使用这项快速的邮件服务。 电子邮件的工作原理: 1) 电子邮件系统是一种新型的信息系统,是通信技术和计算机技术结合的产物。 电子邮件的传输是通过电子邮件简单传输协议(Simple Mail Transfer Protocol,简称SMTP)这一系统软件来完成的,它是Internet下的一种电子邮件通信协议。 2) 电子邮件的基本原理,是在通信网上设立“电子信箱系统”,它实际上是一个计算机系统。系统的硬件是一个高性能、大容量的计算机。硬盘作为信箱的存储介质,在硬盘上为用户分一定的存储空间作为用户的“信箱”,每位用户都有属于自己的—个电子信箱。并确定—个用户名和用户可以自己随意修改的口令。存储空间包含存放所收信件、编辑信件以及信件存盘三部分空间,用户使用口令开启自己的信箱,并进行发信、读信、编辑、转发、存档等各种操作。系统功能主要由软件实现。 3) 电子邮件的通信是在信箱之间进行的。用户首先开启自己的信箱,然后通过键 第 1 页共36 页

vc编写电子邮件程序文件

VC++编写电子程序 .diybl. 时间:2008-08-27 作者:佚名编辑:本站点击:635 [评论] VC++编写电子程序 一、概述 ---- 本文主要讲述如何使用Visual C++用MAPI编写E-mail程序。MAPI是包含在Windows之中的, 因此不需要安装其他额外的部件。MAPI有以下三种形式: SMAPI,Simple MAPI,简单的MAPI CMC,Common Messaging Calls,一般通讯调用 完整的MAPI ---- SMAPI和CMC都包含在完整的MAPI中,当用户想执行一些高级操作,比如编写自己的E-mail服务器的时候, 必须使用完整的MAPI。本文主要阐述如何编写能够收发电子的程序,因此使用SMAPI就足够了。 二、编写电子程序 3-1 初始化MAPI ---- 要使用MAPI,必须首先对它进行初始化。初始化包括以下三个步骤: 装载MAPI32.DLL动态库 找到想要调用的MAPI函数地址 登录到电子对象 3-1-1 装载MAPI32.DLL ---- 要装载MAPI,用户必须程序运行时动态的装载一个动态库。LoadLibrary函数提供了此功能, 它定位一个动态库,并返回HINSTANCE局柄(需要保存该句柄)。 LoadLibrary的语法如下: LoadLibrary ( lpLibFileName ); 其中lpLibFileName为LPCTSTR结构变量, 是所要调用的库的路径和名称。 程序示例: // 调用MAPI32.DLL并计算函数地址 HINSTANCE hInstMail; hInstMail = ::LoadLibrary ( “MAPI32.DLL” ); if ( hInstMail == NULL ) { // 错误处理 // 受篇幅限制,下面的错误处理部分省略 } 3-1-2 确定函数地址 ---- 由于MAPI32.DLL是被动态装载的,因此不知道所要调用的函数地址,也就不能一开始就调用它们,

局域网邮件收发系统方案

《工程软件设计与实践》 技术报告 设计题目局域网收发系统 专业班级软件1003 小组人员许泉斌峰立 组长雷继军 指导教师王宏 计算机学院 2013 年 1 月11号

一收发系统需求分析 1.引言 1.1概述 采用科学方法实现了一个简易电子接收系统的设计与开发,本系统简单地实现的基本功能,重点着重从客户端和用户 界面的开发方面详细阐述了整个电子接收实现的全过程。 1.2背景 随着Internet的迅速发展和普及,网络已经成为人们获取交换信息的重要方式,在各种网络服务中,电子系统以其方 便、快捷的特点成为人们进行信息交流的理想工具。通过电子 人们以非常快的速度同世界上其他互联网用户联络。电子的使 用者数量呈几何级数增长。 1.3目的 简单地实现的基本功能,包括的接收,发送,读取。可以发送附件等,能对列表进行管理的文件夹,可以进行添加, 删除,修改联系人的地址簿。 1.4参考资料 《精通Struts2-基于MVC的JavaWeb应用开发实战》—云芳 《JavaWeb编程入门与实践》—云芳 1.5开发运行环境

服务器端操作系统:Window 7 开发工具:MyEclipse 数据库:Mysql Web应用服务器软件:Tomcat 客户端运行环境:能运行IE6及以上浏览器的操作系统 2 功能描述 2.1模块划分 2.1.1 登录 输入用户名和密码验证是否为合法用户,验证成功后进入系统 2.1.2 退出 用户选择退出系统,系统跳转到登陆页面 2.1.3管理 2.1.2.1 写 向收件人发送,也可以存为存草稿 2.1.2.1 收 收件人收取并读,可以删除到垃圾箱或彻底删除, 2.1. 3.4 草稿箱 可读草稿容和发送,删除草稿后将彻底删除, 2.1. 3.5 已发送 具有删除,彻底删除,转发,移动等功能

电子邮件程序

第八章电子邮件程序 第八章电子邮件程序 在本章中,我们将系统的讨论关于电子邮件的,电子邮件是目前Internet上最重要的应用之一,它和我们在上一章介绍的几种网络应用一样,依赖于应用层的协议,但它分为两个部分,发送一部分,接收一部分,使用不同的协议进行工作,我们将分别介绍这两种协议,并着重于实际的编程应用。 本章重点: z了解关于电子邮件的基本知识 z熟悉WINSOCK处理电子邮件的方法; z熟悉MAPI处理电子邮件的方法 z了解其它较为深入的网络编程问题 8.1 电子邮件与电子邮件协议 8.1.1 电子邮件概述 随着网络技术的发展和网络的广泛使用,电子邮件已经逐渐的进入许多人的生活,它的简单方便使它成为所有网络服务中最重要的一部分,尤其是随着网络上各种免费电子信箱的提供和众多电子刊物的发行,使得收发电子邮件已经成为许多人上网的主要目的。 互联网最初用于方便科学家与政府技术人员间的通信。虽然电子邮件并不是他们采用的第一种通信方式,但它是通信的终极目标。自从互联之日起,它就孕育了电子邮件传输机制。目前,电子邮件完成大部分数据传输工作。统计表明,所有TCP连接中大约一半是用于简单邮件传送协议SMTP。 早期的电子邮件系统仅是将消息拷贝到用户邮箱的程序。那时,用户均使用同一台机器。多用户系统的某个用户使用电子邮件向同一台机器的其他用户发消息。经过一段时期,网关组件的出现允许用户使用一个电子邮件服务器向其他电子邮件服务器发送或者接收邮件。网关允许不同类型的电子邮件系统相互通信。进一步的发展最终促使了电子邮件标准的制定。 电子邮件标准主要有以下两个:X .400,由国际远程通信—通信标准化组织及国际标准化组织制定。简单邮件传输协议(SMTP),由IETF根据早期的研究及开发成果制定。目前最流行的协议就是SMTP。 本节,我们着重介绍的是电子邮件的发送流程,即电子邮件是如何发出的,这是我们学习协议和进行编程的基础。 发送邮件的过程可以参考图8-1,由图中可以看出,用T C P 进行的邮件交换是由报文传送代理完成的,用户甚至不需要和代理打交道。用户仅仅和用户代理相接触。我们考虑的重点是在两个报文传送代理之间邮件是如何传递的。

电子邮件的几种特殊收发

电子邮件的几种特殊收发 作者:飞浪 收发电子邮件对于绝大多数网民来说,几乎不值一谈,但您尝试过用不同的方法来收发E-MAIL吗?下面就是电子邮件比较常见的几种收发方法。 一、在客户端软件上来收发 各位朋友,你们是用什么收发电子邮件呢?其实现在绝大多数用户都会使用Outlook Express、FoxMail 或者其他的各种专用邮件收发工具来收发邮件的?因为使用这些客户端软件,不仅操作直观、简便,而且使用也比较稳定。不同的邮件客户端软件收发邮件的具体过程是不完全一样的,但是收发邮件的基本步骤还是相同的: 1、设置邮件帐号 在邮件客户端软件的主操作界面中,选择与帐号设置对应的命令,如在Outlook Express中选择“帐号”命令,在NetScape中选择“Accounts”命令,随后大家就可以看到一个账户设置窗口,在这个窗口中大家可以单击“添加”或者“ADD”按钮来添加一个账户,添加每一个帐户都需要设定用户的电子邮件地址,发送邮件服务器的IP地址或计算机名称,接受邮件服务器的IP地址或计算机名称。 2、发送邮件 在需要发送新邮件时,大家必须先在邮件客户端软件的主操作界面中单击“新邮件”或者“New Mail”来打开邮件编辑窗口,然后在这个窗口的“发件人”或者“Sender”文本框中输入用户自己的邮件地址,接着在“收件人”或者“Receiver”文本框处填上邮件接受人的电子邮件地址,在“主题”或者“Subject”文本框处输入邮件主要内容,最后在邮件编辑窗口的正文部分编辑好邮件的内容;如果还需要插入附件的话,单击邮件发送界面中的插入附件命令就可以了。编辑好邮件的所有相关内容后,单击一下菜单栏中的发送命令或者直接单击工具栏中的发送按钮就能将电子邮件发送出去了。 3、接受邮件 现在不少邮件客户端软件都具有自动接受新邮件的功能,因此大家平时只要把邮件客户端软件打开就行了,一旦有新邮件达到,邮件程序就会通过相关的方式来提醒用户。如果大家所选择的邮件客户端软件没有邮件自动提示功能的话,只要在邮件软件的主界面中单击“接受新邮件”或者“Receive E-mail”之类的命令,软件就能连接指定的POP3邮件服务器中接受并下载新邮件了。一旦接受到新邮件后,大家可以直接用鼠标打开“收件箱”或者“Inbox”之类的文件夹,并用鼠标双击其中的新邮件标题,就能看到新邮

vc编写电子邮件程序

VC++编写电子程序 .diybl.时间:2008-08-27作者:佚名编辑:本站点击:635 [评论] VC++编写电子程序 一、概述 ---- 本文主要讲述如何使用Visual C++用MAPI编写程序。MAPI是包含在Windows之中的,因此不需要安装其他额外的部件。MAPI有以下三种形式: SMAPI,Simple MAPI,简单的MAPI CMC,mon Messaging Calls,一般通讯调用 完整的MAPI ---- SMAPI和CMC都包含在完整的MAPI中,当用户想执行一些高级操作,比如编写自己的服务器的时候, 必须使用完整的MAPI。本文主要阐述如何编写能够收发电子的程序,因此使用SMAPI就足够了。 二、编写电子程序 3-1 初始化MAPI ---- 要使用MAPI,必须首先对它进行初始化。初始化包括以下三个步骤: 装载MAPI32.DLL动态库 找到想要调用的MAPI函数地址 登录到电子对象 3-1-1 装载MAPI32.DLL ---- 要装载MAPI,用户必须程序运行时动态的装载一个动态库。LoadLibrary函数提供了此功能, 它定位一个动态库,并返回HINSTANCE局柄(需要保存该句柄)。 LoadLibrary的语法如下: LoadLibrary ( lpLibFileName ); 其中lpLibFileName为LPCTSTR结构变量, 是所要调用的库的路径和名称。 程序示例: // 调用MAPI32.DLL并计算函数地址 HINSTANCE hInstMail; hInstMail = ::LoadLibrary ( “MAPI32.DLL” ); if ( hInstMail == NULL ) { // 错误处理 // 受篇幅限制,下面的错误处理部分省略 } 3-1-2 确定函数地址 ---- 由于MAPI32.DLL是被动态装载的,因此不知道所要调用的函数地址,也就不能一开始就调用它们, 而要通过函数名获得函数的地址,并在动态库中查找每一个函数并核实。因此首先必须为这

用VB收发电子邮件

用VB收发电子邮件 发送和接收电子邮件,对于某些执行特殊任务的应用程序而言,是一个十分有用的功能。例如,一个监视网络服务器资源使用情况的工具软件,当它发现服务器的资源使用已 经接近事先设定的临界状态时,便可以向系统管理员发送一封告警的电子邮件,从而使系 统管理员能够及时地采取措施,以避免重大事故的出现。在VB中,应用程序可以通过调用MAPI,实现收发电子邮件的功能。 编制具有收发电子邮件功能的VB程序,必须使用VB4.0以上的版本,因为只有4.0以上 的Visual Basic才带有两个实现电子邮件收发功能的核心控件:MAPI会话控件和MAPI消息控件。MAPI会话控件用于建立和控制一个Microsoft Mail会话,MAPI消息控件用于创建和收发邮件消息。此外,程序必须运行在采用遵从MAPI的消息系统(如:Microsoft Exchang e、Microsoft Mail、Outlook等)的环境中。 在开始编程之前,首先需要将MAPI控件加入VB工具箱。具体操作是:在VB菜单栏中选 择Tools菜单项中的Custom Controls命令,调出"Custom Controls"对话框,在其中的"Av ailable Controls"列表框中选中"Microsoft MAPI Controls"表项,然后按"OK"命令按钮 退出该对话框。此后,工具箱中将新添两个如图1所示的图标,这就是MAPI会话控件和MAP I消息控件的图标。 @@1337300.JPG;图1 MAPI工具图标@@ 下面,笔者将以两个简单的VB程序为例,分别介绍发送邮件和接收邮件的程序编制方 法。 一、邮件发送程序 邮件发送程序的基本处理过程是:根据用户输入信息组成邮件,然后使用MAPI消息控 件的Send方法将邮件发出。编程步骤如下: 1. 新建一个VB项目。 2. 将缺省窗体Form1的Caption属性设置为"发送邮件"。 3. 将MAPI控件加入VB工具框。 4. 在Form1中加入一个MAPI会话控件MAPISession1和一个MAPI消息控件MAPIMessag es1。 5. 在Form1中加入三个文本框控件,将它们的Name属性分别设置为txtSendTo、txtS ubject、txtMessage,并将txtMessage的Multiline属性设置为True。这三个文本框控件将分别用于填写邮件的收件人、主题和内容。 6. 在Form1中加入三个标签控件,将它们的Caption属性分别设置为"收件人"、"主题"和"内容",并将它们放在合适的位置用以标注相应的文本框控件。 7. 在Form1中加入一个命令按钮控件,将其Caption属性和Name属性分别设置为"发送"和"cmdSend"。 8. 将下列代码加入Form1的Form_Load事件: Private Sub Form_Load() MAPISession1.SignOn End Sub 9. 将下列代码加入Form1的Form_Unload事件: Private Sub Form_Unload(Cancel As Integer) MAPISession1.SignOff End Sub

论文_邮件收发管理系统

本科毕业论文说明书 电子邮件收发系统的设计MANAGEMENT SYSTEMS TO SEND AND RECEIVE E-MAIL 学院(部):计算机科学与工程学院 专业班级:信息安全05-2 学生姓名: QQ49765400 指导教师: 2009年6月2 日

电子邮件收发系统的设计 摘要 电子邮件在当今社会中扮演了一个很重要的角色。越来越多的人在使用它。而且用它的人数势必会继续增加。虽然,现在已经有很多的邮件收发软件,但是对于大多数的非专业的人来说它还是有点难度稍嫌复杂。因此,我们就利用SMTP和POP3协议从底层开发了这个软件。SMTP全称是简单邮件传输协议,它专门用来发送邮件用。POP全称是邮局协议,是专门用于接收邮件。本次设计就是利用PHP+Apache这一黄金组合来实现一个邮件收发管理系统,使用此系统,你既可以用它发送一个纯文本邮件,也可以发送一个带有附件的邮件,理所当然地,你也可以使用不同的SMTP服务器。经过测试,证实此软件是一个支持纯文本,或者带附件的邮件发送软件。 关键词:SMTP,POP3,邮件发送,附件

MANAGEMENT SYSTEMS TO SEND AND RECEIVE E-MAIL ABSTRACT E-mail in today's society plays a very important role. More and more people use it. And the number of people using it will certainly continue to increase. Although, there are a lot of software to send and receive mail, but most of the non-professional people it is responsible for a little bit more difficult. Therefore, we will make use of SMTP and POP3 protocol developed from the bottom of this software. The full name of the SMTP Simple Mail Transfer Protocol, is used to send e-mail.POP Post Office Protocol is the full name is dedicated to receiving mail. The design is to use PHP+Apache in this gold to achieve a portfolio management system to send and receive e-mail, the use of this system, you can use it to send a plain text message, you can send an e-mail with attachments, of course, You can also use a different SMTP server. Tested to confirm this software is a support for plain text, or e-mail with attachments software. KEYWORDS: smtp, pop3, e-mail, attachment

VC6.0MFC串口通信编写全过程

其于MFC 的串口调试助手编辑过程 一、新建 打开 VC6.0 文件 新建 工程 MFC AppWiard(exe) 位置(选择保存工程位置) 工程名称(输入工程名XXXX ) 确定 选择基本对话框 下一步 下一步 下一步 选择(CXXXXDlg ) 完成 确定 在生成的基本对话框内将不需要按钮及提示框(自动生成的“确定”“取消” 及提示框)删除或修改使用,至此基本框架完成如下图: 二、往生成的基本框架中添加控件 1、因为控件列表框内没有串口通信用到的通信控件,所以要先添加到控件列表框内再将控件添加到基本框内使用,步骤如下: 菜单栏 工程 添加到工程 Components and controls … Registered ActiveX Controls 选择“Microsoft Communications Control, version 6.0” Insert 确定 OK 关闭此子窗口完成添加操作标志如上图所示。 2、将刚才添加添加到控件列表框内的串口控件添加到基本框架内 点击控件列表框内的串口控件,此时光标变为“十”形,在基本框架内随意划取一矩 形区域,即可以添加串口控件,不需要修改此控件的大小及位置,因为程编译运行后此控件是看不到的,步骤结果如下图:

3、继续往基本框架内添加用于编辑发送数据的输入编辑框及输出编辑框,同理选择控件列表框内的“编辑框控件”,以相同的操作即可添加两个编辑窗口及一个按纽控件如下图所示: 这两个窗口需要修改大小及位置,因为程序运行后将会显示而串口通信控件则不显示,上图是运行后的效果。 4、对以上四个控件编程步骤如下: a 、右击串口通信控件 建立类向导 Member variables Control IDS 中选择IDC_MSCOMM1 add variable … Member variable name 中输入控件变量名m_ctrlComm (变量名可以随意选取,但程序中应与所取变量名一致) OK 确定

相关主题