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

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

 2010-07-01 20:43:08 来源:WEB开发网   
核心提示:这个程序是笔者近日在实验邮件发送系统时写的,原本只想实现功能了事,一组实现邮件发送功能的C++封装类-SMailer,可也许是程序员的惯常品性所至,几经完善的结果就成了如今这个样子了,才会根据路径读取文件内容,随后进行Base64编码,网上也有不少有关于此的源码,但这些程序多半是不完整的

这个程序是笔者近日在实验邮件发送系统时写的,原本只想实现功能了事,可也许是程序员的惯常品性所至,几经完善的结果就成了如今这个样子了。网上也有不少有关于此的源码,但这些程序多半是不完整的,或者属于示例性程序,无法直接拿来使用。一些网络编程的书也有类似介绍,但又过于复杂了。笔者所写的这个程序以上述资源作为参考,并保有自身特点:功能齐全,小巧简洁,取名SMailer也正是出于此意(Simple Mail Sender)。大家可以根据需要加入到自己的系统中去。

程序包括如下功能:

- 支持验证功能,为可选项

- 支持包括html文本、普通文本在内的混排方式

- 支持按特定优先级发送邮件

- 支持一次发送多个附件,为可选项

- 支持多收件人发送,对于某封邮件,可以选择一次只向一个人发送,也可以选择发送给所有人

SMailer的另一个特点是,采用标准c++写就,并具有良好的程序结构,麻雀虽小五脏俱全,诸类各司其职,共同构成了一个完整的小系统。SMailer中多数类都被定义于SMailer名字空间下,以下是程序关键部分的简要讲解:

MimeContent及其子类

针对邮件的正文部分和附件部分,SMailer定义了一个抽象类MimeContent,并声明了几个必要的成员函数:

class MimeContent
{
public:
  MimeContent(const std::string content = "");
  virtual std::string getType() const = 0;
  virtual std::string getDisposition() const;
  virtual std::string getTransEncoding() const = 0;
  virtual std::string& getContent() = 0;
protected:
  std::string _content;
};

随后,SMailer又从MimeContent派生了三个子类:PlainTextContent、TextHtmlContent、AppOctStrmContent,分别代表普通文本的正文、html格式的正文和文件形式的附件。值得注意的是,AppOctStrmContent中记录的是附件所在的路径,只有当调用了getContent函数时,才会根据路径读取文件内容,随后进行Base64编码,这里会用到FileHelper和Base64Helper两个辅助类,后面会讲到:

std::string& AppOctStrmContent::getContent()
{
  // you can add more codes here, such as wrapping lines
  // or replacing ''\n'' with ''\r\n'', etc.
  MUtils::FileHelper::open(_file_name, _content);
  _content = MUtils::Base64Helper::encode(_content);
  return _content;
}

1 2 3  下一页

Tags:实现 邮件 发送

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