主程序:
// smtp.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <WinSock2.h>
#include <stdlib.h>
#include <iostream>
#include <cstring>
#include "ZBase64.h"
#pragma comment(lib,"ws2_32.lib")
using namespace std;
BOOL SendDataQuit();
/************************************************************************/
/* 《配置信息》
/************************************************************************/
#define SMTP_SERVER "smtp.qq.com"
#define SMTP_PORT 25
/************************************************************************/
/*《资源回收宏》
/************************************************************************/
#define RELEASE_SOCKET(s) {if(INVALID_SOCKET!=s){closesocket(s);s=INVALID_SOCKET;}}
#define RELEASE_HANDLE(h) {if(NULL!=h){CloseHandle(h);h=NULL;}}
/************************************************************************/
/*《全局变量》
/************************************************************************/
SOCKET socket_client; // 客户端套接字
hostent *host; // SMTP服务器地址信息
in_addr in_addr_string; // SMTP服务器IP地址
sockaddr_in addr; // 客户端用来配置与SMTP服务端的连接信息(端口+IP)
char buff[1024]; // 用户接收服务端返回数据的缓冲区
char m_name[512]; // 登陆成功后记录用户邮箱账号
int nErr; // 记录错误
/************************************************************************/
/* 《初始化系统资源》
/************************************************************************/
BOOL InitSystem()
{
memset(m_name, 0, sizeof(m_name));
// 初始化网络接口
WSADATA wsadata;
WORD version;
version = MAKEWORD(2, 0);
WSAStartup(version, &wsadata);
// 创建套接字
socket_client = socket(AF_INET, SOCK_STREAM, NULL);
if (INVALID_SOCKET == socket_client)
{
printf("Client->Create Socket Error.\n");
return FALSE;
}
// 获取服务器地址信息
host = gethostbyname(SMTP_SERVER);
memmove(&in_addr_string, host->h_addr_list[0], 4);
// 开始连接SMTP服务器
memset(&addr, 0, sizeof(sockaddr_in));
addr.sin_family = AF_INET;
addr.sin_port = htons(SMTP_PORT);
addr.sin_addr = in_addr_string;
if (SOCKET_ERROR == connect(socket_client, (sockaddr*)&addr, sizeof(sockaddr)))
{
nErr = WSAGetLastError();
printf("Client->Connect Error,Code:%d\n", nErr);
RELEASE_SOCKET(socket_client);
return FALSE;
}
// 接收来自服务器的信息,确认连接成功
memset(buff, 0, sizeof(buff));
nErr = recv(socket_client, buff, sizeof(buff), NULL);
if (nErr == 0 || nErr == SOCKET_ERROR)
{
nErr = WSAGetLastError();
printf("Client->Connect Error,Code:%d\n", nErr);
RELEASE_SOCKET(socket_client);
return FALSE;
}
printf("S