一组实现邮件发送功能的C++封装类-SMailer
2010-07-01 20:43:08 来源:WEB开发网MailSender
MailSender是真正的邮件发送类,实现了邮件发送的关键功能,其public接口甚是简单,你所要做的就是:
- 构造一个MailSender对象,并传入SMTP服务器地址以及用于认证的账号信息(如有必要)
- 构造一个MailInfo对象,设置好相应的邮件信息,将之传入一个MailWrapper对象
- 调用MailSender的setMail函数,将MailWrapper对象传入其中
- 调用MailSender的sendMail函数,发送邮件
class MailSender
{
public:
MailSender(const std::string server_name,
const std::string user_name = "",
const std::string user_pwd = "");
~MailSender();
void setMail(MailWrapper* mail);
void sendMail();
private:
//...
};
其他辅助类
SMailer中还有几个辅助类,分别位于SMailer名字空间和MUtils名字空间下,它们包括:
1、Priority:定义了三种级别的邮件优先级,包括:紧急、普通、缓慢。可以在设置MailInfo时使用它:
class Priority
{
public:
static const std::string important;
static const std::string normal;
static const std::string trivial;
};
2、ErrorMessage:用于为操作失败提供统一的错误描述信息,采用了Singleton Pattern:
class ErrorMessage
{
public:
static ErrorMessage& getInstance();
std::string& request (MailSender::Operaion request_operation);
std::string& response(const std::string expected_response);
private:
std::map _request_errmsg_map;
std::map _respons_errmsg_map;
ErrorMessage();
};
3、MailException:一个异常类,派生自std::exception,程序出错时会统一抛出该异常,通过调用what函数可以得到说明信息:
class MailException : public std::exception
{
public:
MailException(const std::string message = "")
: _message(message)
{
}
const char *what() const throw ()
{
return _message.c_str();
}
private:
std::string _message;
};
4、FileHelper:一个简单的提供文件I/O功能的辅助类,在读取附件内容时被用到。该类位于MUtils名字空间下。
5、WinSockHelper和WinSockException:提供针对WinSock编程所必要的支持功能。此二类位于MUtils名字空间下。
6、Base64Helper:提供Base64的编码/解码功能,在对附件和账号信息进行编码时需要用到。该类位于MUtils名字空间下。
另外,还有以下几点说明:
1、关于源文件的组织
实现邮件发送功能的源文件是SMailer.h和SMailer.cpp,位于SMailer目录下;相关的辅助源文件包括FileHelper.h、WinSockHelper.h、Base64Helper.h、Base64Helper.cpp,它们都位于MUtils目录下。另外TestSMailer.cpp演示了如何使用SMailer的功能,这是一个命令行形式的应用程序,位于和SMailer、MUtils同级的目录下。
2、关于GUI
时间的原因,我没有编写GUI,不过由于所有功能均已封装,要将SMailer加入GUI系统中应该是易如反掌的。
3、关于移植性
程序在MSVC6编译器下运行通过,并在Cygwin-b20下编译通过(头文件要做一点小小的改动),由于代码中采用了S(T)L及BSD风格的socket,所以在其余平台上的移植应该也不会很麻烦。
本文配套源码
更多精彩
赞助商链接