一组实现邮件发送功能的C++封装类-SMailer
2010-07-01 20:43:08 来源:WEB开发网这个程序是笔者近日在实验邮件发送系统时写的,原本只想实现功能了事,可也许是程序员的惯常品性所至,几经完善的结果就成了如今这个样子了。网上也有不少有关于此的源码,但这些程序多半是不完整的,或者属于示例性程序,无法直接拿来使用。一些网络编程的书也有类似介绍,但又过于复杂了。笔者所写的这个程序以上述资源作为参考,并保有自身特点:功能齐全,小巧简洁,取名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;
}
更多精彩
赞助商链接