欢迎来到天天文库
浏览记录
ID:37713601
大小:42.38 KB
页数:13页
时间:2019-05-29
《Smtp邮件发送程序剖析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、SMTP邮件发送剖析封装之后的类如下://MySmtp.cpp:implementationoftheMySmtpclass.////////////////////////////////////////////////////////////////////////#include"stdafx.h"#include"MailExam.h"#include"MySmtp.h"#include"ZBase64.h"#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE
2、[]=__FILE__;#definenewDEBUG_NEW#endif#defineCOPYRIGHT"SmtpClient"//版权信息#defineBOUNDARY"www.hust.edu.cn"//边界字符串////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////
3、////////////////////MySmtp::MySmtp(){}MySmtp::~MySmtp(){}boolMySmtp::CreateSocket()//创建一个Socket{if(WSAStartup(0x0101,&m_WSADATA)!=0)//至此socket版本是2.2,第一个参数也可以是MAKEWORD(2,2){ReleaseSocket();returnfalse;//创建失败}if((m_SOCKET=socket(AF_INET,SOCK_STREAM,0))==INVA
4、LID_SOCKET){ReleaseSocket();returnfalse;}returntrue;}//通过和比较码比较来发现是否响应成功boolMySmtp::CheckResponse(constchar*RecvCode){//将收到的和对应的码字比较,判断是否发生错误charbuf[1024]={0};if(recv(m_SOCKET,buf,1024,0)==SOCKET_ERROR)returnfalse;else{returnbuf[0]==RecvCode[0]&&buf[1]==Re
5、cvCode[1]&&buf[2]==RecvCode[2]?true:false;}}boolMySmtp::Connect(conststringSmtpAddr,constintPort){if(!CreateSocket())returnfalse;//得到主机(要发送给的SMTP地址如smtp.sina.com.cn)地址,并将相应的信息写入m_HOSTENT,//就是在那个字符串中查找到相应信息并且构造一个结构体HOSTENT(这个记录了很多信息,不仅仅是地址)if((m_HOSTENT=get
6、hostbyname((SmtpAddr.c_str())))==NULL)//将传入的主机参数给m_HOSTENTreturnfalse;//AfxMessageBox(m_HOSTENT->h_name);//调试用的,找到HOSTENT的结构内容//AfxMessageBox(*m_HOSTENT->h_aliases);if(m_HOSTENT->h_addr_list[0]==NULL)//地址列表为空{ReleaseSocket();returnfalse;}//AfxMessageBox(m_
7、HOSTENT->h_addr_list[0]);//AfxMessageBox(m_HOSTENT->h_addr_list[1]);memset(&m_SOCKADDR_IN,0,sizeof(m_SOCKADDR_IN));//将这个SOCKET和主机地址联系起来,其实WinSoket中,m_HOSTENT和m_SOCKADDR_IN都是表示的主机地址,也就是目的地的地址//m_SOCKADDR_IN.sin_family=AF_INET;m_SOCKADDR_IN.sin_addr.S_un.S_a
8、ddr=*(ULONG*)m_HOSTENT->h_addr_list[0];m_SOCKADDR_IN.sin_port=htons(Port);//u_longtmp=*(ULONG*)m_HOSTENT->h_addr_list[0];//charnewstring[30];//sprintf(newstring,"%d",tmp);//AfxMessageBox(newstring);//进行连接if(c
此文档下载收益归作者所有