vmime解析邮件

本文涉及的产品
云解析DNS,个人版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 前文写了使用vmime库通过POP3协议收取邮件,继续写对邮件的解析。 解析邮件相对比较简单,需要将收取的邮件,重新从字符串转换成vmime::message格式,然后就可以获取到自己需要部分的内容了。 首先将vmime::string格式转换为vmime::message: vmime:

前文写了使用vmime库通过POP3协议收取邮件,继续写对邮件的解析。

解析邮件相对比较简单,需要将收取的邮件,重新从字符串转换成vmime::message格式,然后就可以获取到自己需要部分的内容了。
首先将vmime::string格式转换为vmime::message:
vmime::utility::ref<vmime::message> mail = vmime::create<vmime::message>();
mail->parse(mailContent);
vmime还提供了一个简单的帮助类vmime::messageParser方便对message进行解析。
message主要包含了邮件头和邮件内容,内容又因为multi-part的邮件格式规定,被拆分成了多个vmime::textPart。通常使用到的textPart的子类,有vmime::htmlTextPart和vmime::plainTextPart,分别对应邮件body中的content-type为text/html和text/plain。
代码:
vmime::messageParser mp(mail);
for (int i = 0; i < mp.getTextPartCount(); ++i) //遍历所有的textPart
{
vmime::utility::ref<const vmime::textPart> text = mp.getTextPartAt(i);
if (text->getType().getSubType() == vmime::mediaTypes::TEXT_HTML) //text/html
{
vmime::utility::ref<const vmime::htmlTextPart> htmlText = text.dynamicCast<const vmime::htmlTextPart>();
vmime::utility::outputStreamStringAdapter htmlOut(htmlContent);
vmime::utility::charsetFilteredOutputStream utf8Out(htmlText->getCharset(), vmime::charset(“utf-8″), htmlOut); //强制转换正文为utf8编码
htmlText->getText()->extract(utf8Out);
utf8Out.flush();
}
else if (text->getType().getSubType() == vmime::mediaTypes::TEXT_PLAIN) //text/plain
{
vmime::utility::ref<const vmime::plainTextPart> plainText = text.dynamicCast<const vmime::plainTextPart>();
vmime::utility::outputStreamStringAdapter plainOut(plainTextContent);
vmime::utility::charsetFilteredOutputStream utf8Out(plainText->getCharset(), vmime::charset(“utf-8″), plainOut);
plainText->getText()->extract(utf8Out);
utf8Out.flush();
}
}

对于html个是的邮件正文,还可以遍历获取里面的embeddedObject,如嵌入的附件图片等,不过目前没有这样的需求,就没有去尝试了。

在真正执行的时候,又发现了一个问题,必须在开始使用前,调用vmime::platform::setHandler<vmime::platforms::posix::posixHandler>();设置平台相关的handler,这里设置的是符合posix的平台,windows貌似也有对应的handler。

转载自:https://coolex.info/blog/113.html
目录
相关文章
|
9月前
|
域名解析 网络协议 网络安全
DNS中我们域名解析的邮件服务器现在不能发送邮件了,能不能看下解析这边有没有问题?
DNS中我们域名解析的邮件服务器现在不能发送邮件了,能不能看下解析这边有没有问题?
106 1
|
2月前
|
存储 自然语言处理 安全
外贸企业邮箱解析:通向全球市场的邮件之路
外贸企业邮箱对于全球贸易至关重要,主要解决语言沟通障碍、信息安全风险和团队协作不畅三大问题。Zoho Mail作为示例,提供73种语言翻译、强大的邮件管理和安全保障,以及灵活的协作工具。其翻译功能免费,支持试用,是外贸企业的理想选择。
36 0
|
2月前
|
域名解析 缓存 网络协议
阿里云DNS常见问题之DNS企业邮箱 不可以收发邮件如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
2月前
|
网络协议 搜索推荐
阿里云DNS常见问题之阿里云DNS企业邮箱收不到国外的邮件如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
Java
springboot业务功能实战(二十)连接内外网邮箱配置全解析,实现邮件提醒功能
springboot业务功能实战(二十)连接内外网邮箱配置全解析,实现邮件提醒功能
327 0
springboot业务功能实战(二十)连接内外网邮箱配置全解析,实现邮件提醒功能
阿里云如何添加邮箱解析来实现收发邮件服务
当你买域名后,要在阿里云添加邮箱解析,邮箱解析是把域名指向邮箱的服务器地址,实现邮箱的收发邮件服务。一、联系邮箱提供商,获取邮箱解析记录,这部分数据一般在邮箱提供商帮助文档里有,要么就和客服索要。二、添加解析操作步骤 1、联系邮箱提供商,获取邮箱解析地址记录。
|
Java 应用服务中间件 数据安全/隐私保护

推荐镜像

更多