您的位置:首页 > 其它

用PSTSDK读取OUTlOOK中的邮件

2015-08-18 14:34 316 查看
本文原创转载请加上原文地址。谢谢。(此文任然有一些细节问题。要想得到更精确的邮件读取可以mail给我:

Biseny@qq.com

)

转载请标明地址

微软公布了OUTLOOK 的数据文件PST的数据格式。

PSTSDK下载地址:http://pstsdk.codeplex.com/releases/view/48297

SDK还存在一些问题。所以不断更新中。

下载后我的编译环境:WIN7+VS2010+Boost库。还必须在Unicode环境下使用。试了多种环境竟然编译不了。没法。只有这种环境下才能通过。

写出来的dll要在安装了“vs2010运行库”的环境下面才能使用。

运行库下载地址:http://www.orsoon.com/Soft/9389.html (官网上有。吥过我没有找到!!)怕毒的还是去官网看下吧。

(我這裡還有個方法。可以不安裝運行庫也能使用生成的DLL)。。需要的聯繫我:Biseny@qq.com

首先新建项目。引用头文件

#include “pstsdk/pst/pst.h”

然后原形声明:

void process_pst(const pstsdk::pst& p);//这里接受PST数据文件

void process_folder(const pstsdk::folder& f)//这里遍历数据文件里面的第一层目录结构

void process_message(const pstsdk::message& m);//这里开始遍历目录里面的邮件。邮件内容都从这里读取出来。

void process_recipient(const pstsdk::recipient& r);//这里开始遍历邮件里面的详细信息。发件人。收件人都还有服务器配置都从这里读取出来。

void process_attachment(const pstsdk::attachment& a);//这里是读取每封邮件的里面的附件。

然后:

pst PinND(“这里写路径。”);

process_pst(PinND);

然后看下面:

void process_folder(const pstsdk::folder& f)

{

f.get_name().c_str();//获取PST里面装邮件的目录比如:收件箱,发件箱,已删除邮件。

f.get_message_count();//这里可以获得目录里面的邮件数量。方便遍历。

for_each(f.message_begin(),f.message_end(), process_message);//调用 process_message 方法 对邮件进行遍历。。

for_each(f.sub_folder_begin(), f.sub_folder_end(), process_folder);//这里用递归。循环读取目录。

}

void process_message(const pstsdk::message& m)

{

m.get_attachment_count();//这里可以获取。附件的数量。

m.size();//这里可以获得邮件大小。

m.get_subject();//这里可以获得邮件的标题。

m.get_body;//这里可以获得邮件的正文。

//这里获得邮件相信信息的数量然后进行遍历。

if(m.get_recipient_count() > 0)

{

for_each(m.recipient_begin(), m.recipient_end(), process_recipient);

}

//判断附件数并进行处理

if(m.get_attachment_count() > 0)

{

for_each(m.attachment_begin(), m.attachment_end(), process_attachment);

}

}

//这个方法提取出附件。

void process_attachment(const pstsdk::attachment& a)

{

a.get_filename().c_str();//附件名字。

if(a.is_message())

{

process_message(a.open_as_message());

}

else

{

std::wstring wfilename = a.get_filename();

std::string filename(wfilename.begin(), wfilename.end());

ofstream newfile(filename.c_str(), ios::out | ios::binary);

newfile << a;

}

}

//这里对邮件的详细信息进行读取。

void process_recipient(const pstsdk::recipient& r)

{

//CString fda=(CString)r.get_account_name().c_str();

//CString faw=(CString)r.get_address_type().c_str();

//CString lk=(CString)r.get_email_address().c_str();

//AfxMessageBox(fda);

//AfxMessageBox(faw);

//AfxMessageBox(lk);

RsTO=ws2s(r.get_name()).c_str();//这里获得收件人。

}

提供了这些信息应该可以完整的读取出pst文件里面邮件了

首发,转载标明出处。

彭颖森新浪博客首发:http://blog.sina.com.cn/scpys
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: