由于工作需要,查阅了相关资料,利用VC2005实现了邮件发送,源程序如下:
//-------------------------------------------------------SmtpSendEmail.h------------------------------------
#pragma once
#include <list>
#include <string>
#include <fstream>
#include<WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
#ifndef _SMTPSENDEMAIL_H
#define _SMTPSENDEMAIL_H
//发送线程
DWORD WINAPI SendMailThread(LPVOID lpParam);
class SmtpSendEmail
{
public:
SmtpSendEmail(void);
virtual ~SmtpSendEmail(void);
public:
void SetPost( int nPost );
void SetHost( string strHost );
void SetAccount( string strAccount );
void SetPassword( string strPassword );
void SetMailFrom( string strMailFrom );
void SetSendTo( string strSendTo );
void SetSubject( string strSubject );
void SetDateTime( string strDateTime );
bool AddDataFromString( string strData );
bool AddDataFromBuffer( char* szData, int iLen );
bool AddDataFromFile( string strFileName );
bool AddAttachedFile( string strFilePath, string strFileName );
bool SandThread();
bool StarMailThread();
private:
int Base64EncodeLen( int nSrcLen );
bool Base64Encode( const BYTE* szSrcData, int nSrcLen, BYTE* szDestData, int* pnDestLen );
bool CheckResponse(int nResCode);
bool ConnectServ();
bool SendHelo();
bool SendEhlo();
bool AutoLogin();
bool EmailFrom();
bool EmailTo();
bool DataServ();
bool SendData();
bool SendAttachedFile();
bool QuitServ();
private:
static const char m_szBase64CodeTable[];
static const string MIMEMultipartMixedLogin;
static const string MIMETextPlainLogin;
static const string MyBoundary;
static const string CTCodeQP;
static const string CTCodeBase64;
static const string CTTextPlainCharCodeGB2312;
static const string CTAppOctetStreamName;
static const string CDAttachemntFileName;
struct SMTPSTRU
{
int nPost;
string strHost;
string strAccount;
string strPassword;
string strMailFrom;
string strSendTo;
string strSubject;
string strDateTime;
string strData;
};
struct FILEINFOSTRU
{
string strPath;
string strFile;
};
SOCKET m_hSocket;
SMTPSTRU m_smtpPro;
list<FILEINFOSTRU> m_listFileInfo;
};
#endif
//------------------------------------------------SmtpSendEmail.cpp------------------------------------------------------
#include "StdAfx.h"
#include "SmtpSendEmail.h"
//发送线程
DWORD WINAPI SendMailThread(LPVOID lpParam)
{
((SmtpSendEmail*)lpParam)->SandThread();
return 0;
}
const char SmtpSendEmail::m_szBase64CodeTable[] = { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" };
const string SmtpSendEmail::MIMEMultipartMixedLogin = "X-Mailer: Gddsky mailer/r/n MIME-Version: 1.0/r/nContent-type: multipart/mixed;boundary=/"===_000_Gddsky_000_===/"/r/n/r/n";
const string SmtpSendEmail::MIMETextPlainLogin = "X-Mailer: Gddsky mailer/r/nMIME-Version: 1.0/r/nContent-type: text/plain;charset=/"GB2312/"/r/n Content-Transfer-Encoding: base64/r/n/r/n";
const string SmtpSendEmail::MyBoundary = "/r/n--===_000_Gddsky_000_===/r/n";
const string SmtpSendEmail::CTCodeQP = "Content-Transfer-Encoding: quoted-printable/r/n/r/n";
const string SmtpSendEmail::CTCodeBase64 &nb