WEB开发网
开发学院软件开发VC 一组实现邮件发送功能的C++封装类-SMailer 阅读

一组实现邮件发送功能的C++封装类-SMailer

 2010-07-01 20:43:08 来源:WEB开发网   
核心提示:MailSenderMailSender是真正的邮件发送类,实现了邮件发送的关键功能,一组实现邮件发送功能的C++封装类-SMailer(3),其public接口甚是简单,你所要做的就是:- 构造一个MailSender对象,并在Cygwin-b20下编译通过(头文件要做一点小小的改动),由于代码中采用了S(T)L及B

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,所以在其余平台上的移植应该也不会很麻烦。

本文配套源码

上一页  1 2 3 

Tags:实现 邮件 发送

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接