使用vmime收取邮件

简介: vmime对邮件格式和邮件协议做了很好的封装,使用起来还是非常方便的。 vmime对于邮件协议都封装在vmime::net名字空间中,主要要用到的对象,有: vmime::net::session,主要用于维护和服务器之间的连接 vmime::net::store,表示一个邮件存储,这是一个基

vmime对邮件格式和邮件协议做了很好的封装,使用起来还是非常方便的。

vmime对于邮件协议都封装在vmime::net名字空间中,主要要用到的对象,有:
vmime::net::session,主要用于维护和服务器之间的连接
vmime::net::store,表示一个邮件存储,这是一个基类,没种邮件协议都有自己的store(如POP3Store,IMAPStore)
vmime::net::folder,表示邮件存储上的文件夹,和store一样,每种邮件协议,都有自己的folder实现
vmime::net::message,表示一封网络邮件,和vmime::message不同,vmime::net::message可能只有邮件的一部分,如邮件头等信息(由使用的邮件协议决定)。
vmime会根据session中设置的邮件协议,创建对应的store。
一些常用操作的实现(POP3协议):
连接邮箱:
vmime::utility::ref<vmime::net::session> session = vmime::create<vmime::net::session>(); //创建session
vmime::utility::ref<vmime::net::store> store = session->getStore(vmine_url); //获得store
store->connect();//连接
vmime::utility::ref<vmime::net::folder>folder = store->getDefaultFolder();//创建folder,路径是默认路径(inbox)
folder->open(vmime::net::folder::MODE_READ_WRITE);//以读写的形式打开
获取邮件:
std::vector<vmime::utility::ref<vmime::net::message> > allMessages = folder->getMessages();
folder->fetchMessages(allMessages, vmime::net::folder::FETCH_ENVELOPE); //获取所有邮件的头部信息,包含sender, recipients, date, subject
vmime::string mailContent;
vmime::utility::outputStreamStringAdapter out(mailContent);
resultMsg->extract(out); //找到需要的邮件后,下载到本地,保存到string中,这里vmime::string是std::string的typedef
删除邮件:
folder->deleteMessage(resultMsg->getNumber()); //执行删除指令
folder->close(true);//关闭文件夹,真正对邮件进行删除
使用当中出现的问题:
按照vmime-book中的例子,在获取邮件的时候,增加了vmime::net::folder::FETCH_FLAGS标签后,会抛出异常,提示不支持该操作。
还有执行了folder->deleteMessage函数之后,邮件没有真正删除。通过抓包和查看源代码后发现,deleteMessage函数是对邮件服务器发送了DELE指令,但是邮件服务器不会立即执行,需要QUIT之后才会真正的删除。而在folder的析构函数中,调用的是folder->close(false)函数来关闭文件夹的,这样在发送QUIT命令之前,会向邮件服务器发送一个RSET命令,将已经被标记为删除的邮件状态充值,所以不会真正的删除邮件。目前只有在执行了删除命令后,显式执行close(true)函数,确保马上发送QUIT命令,让服务器删除邮件。
上述命令真正执行的POP3命令为:
#连接
USER xxx #用户名
PASS xxx #密码
STAT #查询邮件数量和大小
TOP 1 0 #查看序号为1的邮件的头部
RETR 1 #接受第一封邮件的所有内容
DELE 1 #删除第一封邮件
QUIT #退出,服务器执行删除操作

转载自:https://coolex.info/blog/108.html
会影
+关注
目录
打赏
0
0
0
0
9
分享
相关文章
阿里云短信接口费用
阿里云短信接口费用,阿里云短信服务价格表,阿里云短信0.032元一条,阿里云短信价格?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信价格0.032元一条
208 0
阿里云短信费用价格表
阿里云短信费用价格表,阿里云短信服务价格表,阿里云短信0.032元一条,阿里云短信价格?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信价格0.032元一条
302 0
阿里云短信费用收费价格表
阿里云短信费用收费价格表,阿里云短信服务价格表,阿里云短信0.032元一条,阿里云短信价格?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信价格0.032元一条
242 1
阿里云短信群发、验证码、短信提醒费用价格表
阿里云短信群发、验证码、短信提醒费用价格表,阿里云短信服务价格表,阿里云短信0.032元一条,阿里云短信价格?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信价格0.032元一条
647 0
阿里云域名新注、续费、转入收费政策及价格表(2023最新版价格)
阿里云的域名注册业务由万网提供接口,因此,也可以说目前阿里云是目前国内最大的域名注册商,阿里云域名价格表包括域名注册、域名续费及域名转入价格,不同时期的收费价格是不一样的,例如2022年在阿里云注册.com域名的新注价格是63元,续费是75元,到了2023年,由于各大注册商纷纷都涨价了,阿里云也涨到了69元,续费价格也上涨到了79元,下面是小编整理的2023年最新版的阿里云域名新注、续费、转入收费价格表。
10263 19
阿里云域名新注、续费、转入收费政策及价格表(2023最新版价格)
国际阿里云账号OSS购买了资源包为何仍会欠费?
对象存储OSS提供多种类型的资源包,用以抵扣您使用OSS过程中产生的部分费用,但是资源包并不能抵扣所有费用。本文将为您解答为什么购买了资源包之后仍会欠费。
国际阿里云账号OSS购买了资源包为何仍会欠费?
阿里云通知短信价格
阿里云通知短信价格,阿里云短信服务价格表,阿里云短信0.032元一条,阿里云短信价格?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信价格0.032元一条
115 0
阿里云国际短信收费价格表(一条价格/短信包费用)
阿里云国际短信收费价格表,国际短信一条价格、国际短信包费用,​​阿里云国际短信费用价格表,印度短信0.216元一条、中国香港短信0.33元一条、美国短信0.053元一条、日本短信0.514元一条、俄罗斯短信1.02元一条、印尼短信1.01元一条、意大利短信0.565元一条、伊朗短信0.592元一条,阿里云国际短信支持东南亚、欧洲、非洲、美洲等国家和地区
968 0
阿里云短信按量付费和短信套餐包价格表
阿里云短信按量付费和短信套餐包价格表,阿里云短信服务价格表,阿里云短信0.032元一条,阿里云短信价格?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信价格0.032元一条
398 0
阿里云短信验证码收费标准
阿里云短信验证码收费标准,阿里云短信服务价格表,阿里云短信0.032元一条,阿里云短信价格?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信价格0.032元一条。新用户购买阿里云短信套餐包6.9元200条起,价格低至0.032元/条
380 0

热门文章

最新文章

下一篇
oss创建bucket