用PSTSDK读取OUTlOOK中的邮件

本文原创转载请加上原文地址。谢谢。(此文任然有一些细节问题。要想得到更精确的邮件读取可以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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值