`
grandboy
  • 浏览: 124862 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

IMAP文件夹编解码实现

阅读更多
参考链接: 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;
    }
}


分享到:
评论

相关推荐

    S22.Imap解决中文乱码问题

    4. **自定义解码逻辑**:在更复杂的情况下,可能需要实现自定义解码逻辑,通过分析邮件内容的特征来推测正确的编码。 在提供的压缩包“解决邮件乱码问题”中,很可能包含了对S22.Imap源码的具体修改和修复,以及...

    C#一个邮件收取客户端ImapX源码

    - IMAP命令的实现:理解各种IMAP命令的语法和用途,以及它们在源码中的实现方式。 - 编码与解码:学习如何处理不同类型的邮件编码,确保正确显示和存储邮件内容。 - 安全性:了解如何在源码中应用SSL/TLS来确保...

    Python私人邮件获取.rar

    IMAP允许用户在服务器上管理邮件,比如标记为已读或移动到不同的文件夹,而POP3则会将邮件下载到本地设备,通常不保留服务器上的副本。对于大多数私人邮件获取需求,IMAP可能更为合适,因为它提供了更好的邮件管理...

    javamailjavamailjavamail

    3. **IMAP(Internet Message Access Protocol)**:IMAP4 是一个更为先进的邮件接收协议,它允许用户在线或离线查看邮件,支持多文件夹和共享,以及查看邮件头部信息以决定是否下载完整邮件。IMAP 提供了比 POP 更...

    JavaMail简易教程

    3. IMAP(Internet Message Access Protocol):IMAP4是一个更为先进的邮件接收协议,允许用户在线查看、管理邮件,并支持多文件夹和共享。如果邮件服务器支持IMAP,JavaMail API可以让应用程序利用这些特性,提供更...

    socket邮件客户端

    Socket邮件客户端是一款基于Socket编程技术实现的电子邮件应用程序,它允许用户通过SMTP(简单邮件传输协议)发送邮件,并通过POP3(邮局协议)或IMAP(互联网消息访问协议)接收邮件。这款客户端的独特之处在于其...

    java socket 邮件客户端

    这种方式虽然更灵活,但需要处理更多的底层细节,如TCP连接建立、数据编码解码、错误处理等。 源代码分析可以帮助我们深入理解客户端如何建立连接,如何发送和接收数据,以及如何解析邮件格式。这对于学习网络编程...

    JavaMailAPI细节详细解析大全.pdf

    它提供了一个与具体邮件协议无关的接口,允许开发者在不关心底层协议细节的情况下,实现电子邮件的收发功能。JavaMail API 包含了两个主要的部分:一是基础功能,涉及邮件的创建和管理;二是依赖特定协议的部分,如...

    javamail教程

    - **IMAP扩展了POP3**,支持更复杂的邮箱操作,如多文件夹管理,离线模式等。 3. **邮件的组织结构** - 邮件通常包含头部(如发件人、收件人信息)、主体和可能的附件。邮件格式遵循RFC 822标准,后来由MIME协议...

    java 电子邮件 毕业设计 客户端 全套带论文

    - 主要组件包括`Session`(会话)、`Message`(邮件)、`Store`(存储)、`Folder`(文件夹)等。 5. **SSL/TLS安全连接**: - SMTP、POP3和IMAP协议可以通过SSL或TLS加密,增强通信安全性。 - JavaMail API支持...

    发送 email

    JavaMail API可以处理多种邮件协议,如SMTP(Simple Mail Transfer Protocol)用于邮件发送,POP3(Post Office Protocol Version 3)和IMAP(Internet Message Access Protocol)用于邮件接收。本文将聚焦于如何...

    基于VB的MP3播放系统

    3. 播放引擎:使用VB内置的多媒体组件或第三方库(如DirectShow)进行MP3文件的解码和播放。 4. 控制逻辑:处理用户交互,如点击按钮、拖动进度条等,更新播放状态。 5. 邮件模块:如果存在,将处理邮件的发送和接收...

    基于VB的个人邮件处理系统设计

    邮件内容可能需要解码,如Base64或Quoted-Printable编码。 四、邮件管理功能 1. 邮件查看:展示邮件内容,可能包括HTML格式,需要解析并正确显示。 2. 邮件搜索:实现关键词搜索,查找特定邮件。 3. 文件附件...

    netty4.0源码,netty例子,netty api文档

    Pipeline允许你自定义处理网络数据的方式,每个Handler可以执行特定的任务,如解码、加密、认证等。数据在网络中的流动就像在Pipeline中的传输一样,依次经过每个Handler。 5. **丰富的协议支持**:Netty内置了对...

    WiresharkPortable

    与标准安装版不同,便携版可以在不安装到系统的情况下运行,只需将程序文件夹复制到任何位置,就可以直接启动使用,这对于需要在多台电脑上进行网络分析或者希望保持工作环境独立的用户来说非常方便。同时,便携版也...

    邮件收发系统的一些源代码

    源代码可能包括解析MIME格式的代码,将附件解码并存储,或者将本地文件编码为MIME格式以进行发送。 4. SSL/TLS安全传输:为了保护用户隐私和数据安全,邮件系统通常使用SSL(Secure Sockets Layer)或其更现代的...

    Mail

    在IT行业中,"Mail...通过`Mail-master`这个文件夹名,我们可以推测这可能是一个包含示例代码或项目的压缩包,用于学习和实践Python的邮件处理功能。进一步研究这个压缩包,可以深入了解邮件处理的具体实现和技巧。

    Python接收Gmail新邮件并发送到gtalk的方法

    这个模块允许程序连接到支持IMAP的邮件服务器,并执行各种操作,如连接、登录、选择文件夹、搜索邮件、获取邮件内容等。在脚本中,我们通过指定服务器名称和端口来建立连接,然后使用用户的用户名和密码进行登录。 ...

    python标准库3.7.3.docx

    - **7.14 imaplib 模块**:提供了IMAP协议的客户端实现。 - **7.15 smtplib 模块**:提供了SMTP协议的客户端实现。 - **7.16 telnetlib 模块**:提供了Telnet协议的客户端实现。 - **7.17 nntplib 模块**:提供了...

Global site tag (gtag.js) - Google Analytics