参考链接: http://hi.baidu.com/hswt/blog/item/e577b0fb4c45ed334f4aea95.html
据原作者讲,是从Perl算法转成的C#算法,我现在没有办法,只能使用Java, 所以又转成Java的实现了,都比较类似,但是由于本人对C#的不熟悉,还是费一些时间在网上找关于C#的正则表达式对象的使用方法.
现在把真正的Java版本放出来, 如果对概念有什么不理解的请直接参考原文章
public class ImapFolderEncoder {
public static String encode(String folder) {
String rtn = "", base64;
int index = 0;
Pattern regAsis = Pattern.compile("\\G(?:[\\x20-\\x25\\x27-\\x7e])+");
Pattern reg26 = Pattern.compile("\\G&");
Pattern regEncode = Pattern.compile("\\G(?:[^\\x20-\\x7e])+");
Pattern regEq = Pattern.compile("=+$");
Pattern regSlash = Pattern.compile("\\/");
while (index < folder.length()) {
Matcher m;
m = regAsis.matcher(folder);
if (m.find(index)) {
index = index + (m.end() - m.start());
rtn = rtn + m.group();
continue;
}
m = reg26.matcher(folder);
if (m.find(index)) {
index = index + (m.end() - m.start());
rtn = rtn + "&-";
continue;
}
m = regEncode.matcher(folder);
if (m.find(index)) {
index = index + (m.end() - m.start());
base64 = SimpleUtil.encodeBase64Content(m.group(), "UTF-16BE");
base64 = base64.replaceAll(regEq.pattern(), "");
base64 = base64.replaceAll(regSlash.pattern(), ",");
rtn = rtn + "&" + base64 + "-";
continue;
}
}
return rtn;
}
}
public class ImapFolderDecoder {
public static String decode(String folder) {
String rtn = "", base64;
int index = 0;
Pattern regAsis = Pattern.compile("\\G([^&]+)");
Pattern reg26 = Pattern.compile("\\G\\&-");
Pattern regDecode = Pattern.compile("\\G\\&([A-Za-z0-9+,]+)-?");
Pattern regComma = Pattern.compile(",");
while (index < folder.length()) {
Matcher m;
m = regAsis.matcher(folder);
if (m.find(index)) {
index = index + (m.end() - m.start());
rtn = rtn + m.group();
continue;
}
m = reg26.matcher(folder);
if (m.find(index)) {
index = index + (m.end() - m.start());
rtn = rtn + "&";
continue;
}
m = regDecode.matcher(folder);
if (m.find(index)) {
index = index + (m.end() - m.start());
base64 = m.group().substring(1, m.group().length() - 1);
base64 = base64.replaceAll(regComma.pattern(), "/");
int mod = base64.length() % 4;
int count = 4 - mod;
while (count > 0) {
base64 += "=";
count--;
}
base64 = SimpleUtil.base64Decode(base64, "UTF-16BE");
rtn = rtn + base64;
continue;
}
}
return rtn;
}
}
分享到:
相关推荐
Atom-feeds2imap.clj.zip,使用jvm上的clojure将rss/atom提要拉到imap文件夹。FEEDS2IMAP.CLJ公司,atom是一个用web技术构建的开源文本编辑器。
有些邮件系统的表头没有带有编码方式,使用S22.Imap下载邮件会出现乱码问题,修改了源码,解决了中文乱码的问题。
这个 perl 脚本是为了过滤和修改来自 IMAP 文件夹的邮件并将它们转发到 JIRA 问题跟踪器以创建新问题和评论的需要而创建的,因为 JIRA 不支持任何理智的方式来处理 HTML 邮件(尤其是来自Outlook) 或删除不必要的...
============= imap-expire 使IMAP文件夹中的邮件过期。要求Python可选的如果您不想在配置中存储未加密的密码,也可以将其存储在密钥环实现中。一些密钥环实现(Gnome密钥环,OSX密钥链等)用法查看expire.cfg....
feeds2imap.clj:使用JVM上的Clojure将RSSAtom提要拉到您的IMAP文件夹中
imap_copy, 将文件夹从一个IMAP服务器复制到另一个服务器的简单工具 IMAP副本这是将文件夹从一个IMAP服务器复制到另一个服务器的非常简单的工具。例如:下面的示例将其他服务器的收件箱中的所有邮件复制到'其他...
IMAP4的邮件研究与实现,需要图片合成才能看完整的内容
IMAP4rev1允许,以一种功能上等效于本地文件夹的方式,操作邮箱(远程邮件文件夹)。IMAP4rev1也提供这样一个功能,一个离线客户端与服务器异步(交互)。 IMAP4rev1包括以下操作:创建、删除、及重命名邮箱,检查...
Go 中的 IMAP 客户端和服务器实现。 该项目是 2 个项目统一努力的结果: - 用 Go 编写的 IMAP 客户端 - 用 Go 编写的 IMAP 服务器 这种合并背后的动机是代码重用、更容易的测试和更容易的贡献。 安装 go get ...
包含s22.imap 库开源代码及163 IMAP限制修复, VS2017测试通过
一个支持IMAP、STMP、POP3的邮件库,可以在VC下使用!安装包里有程序库、例子和使用手册。
通过邮件开通POP3和imap协议,可以在客户端实现读取邮件 标头、日期、附件等内容,并实现下载附件等功能。(测试网易、新浪、QQ免费邮箱可以实现删除邮件功能并同步到服务器邮箱,但测试免费试用期网易企业邮箱时,...
imap框架下载,有用到的来下吧 Manifest-Version: 1.0 SCCS-ID: @(#)imap.mf 1.2 00/09/26 Extension-Name: com.sun.mail.imap Specification-Title: com.sun.mail.imap Specification-Version: 1.2 Specification-...
源码通过套接字实现了IMAP指令获取邮件,源码实现了链接收信服务器_IMAP,登录邮箱,发送数据,接收数据,发送IMAP命令,断开连接等命令。点评:源码调用了常量支持库,如果易语言没有这个支持库,请自行在网站上...
imap详解imap详解imap详解imap详解
imapcopy imapcopy是用编写的...包括其所有附件保留消息的日期和状态,包括未读/已读已回答已标记已删除草案(可选)保留(也称为“ IMAP关键字”或“标签”) (可选)自动删除文件夹名称中的无效空格支持源和目标
使用javamail通过imap协议收到Exchange2007中的邮件; 其他的邮箱也可以使用,但主要实现了对Exchange2007的收取。
using LumiSoft.Net; using LumiSoft.Net.IMAP; using LumiSoft.Net.IMAP.Client; using LumiSoft.Net.Mail;
IMAP命令学习 教程 很实用IMAP命令学习 教程 很实用