当前位置:编程学习 > VB >>

自己做一个通用的读取电子邮件的软件可行吗?

本人目前在尝试做这样一个东西,目的是可以在打开电脑联网时自动读取未读的邮件,提醒用户并且可以直接用软件自带的解析模块解析邮件,防止用户忽略一些重要的邮件。

 目前已经完成的功能:
 (1)能够对MIME协议的两种编码方式BASE64和Quoted-Printable编码的邮件内容正确地进行解析(包括正文和附件),已经通过多个邮箱多封邮件验证;
 (2)能够正确地分离邮件头和邮件内容;
 其他次要的就不说了。

 目前需要改进的功能:
 (1)对邮件头的某些属性不能完全正确地分段。例如:有些邮件的Subject、Content-Type属性值可能超过一行,那么如果按换行符作为属性值结束的标致就不完整;于是我自然而然地想到了以至少一个换行符和冒号作为结束标致,然后去掉最后一个换行符之后的内容,但是目前不敢肯定这种想法,因为属性值中既有换行符同时也出现冒号怎么办?(不知道有没有这种可能性,因为一般Subject都是经过编码的,冒号不会出现);后来我又想到了一种判断方法,那就是通过验证换行符后是否出现标准的MIME协议中规定的属性名称,例如From后面一般会出现To等等,只要前一个属性名称后出现标准协议中规定的属性名称中的任何一个则认为属性值结束。起初我以为这个想法应该万无一失了,结果发现并不是所有的POP服务器都是完全遵照MIME协议标准的,一般都附有服务器自带的属性名称,万一恰恰我关心的几个属性From,To,Subject,Content-Type中后面跟了一个我的软件中没有约定的属性名称,那就歇菜了。我本人对MIME协议不是理解得很透彻,网上资料也不多,所以我不确定是不是符合MIME协议的邮件的头中除了Date属性外,其余属性的属性值都不允许直接出现冒号,否则需要进行编码操作,这样可以确保解析邮件时不会出现意外。这是我的一个猜测,目前没被推翻,但不知道实际情况是否如此?所以请对这方面有研究的大侠冒个泡讨论下吧!
 (2)不同字符集之间的转换。我使用的是VB6.0的开发环境,有点落伍了,呵呵。所以转码什么的用的都是StrConv这个函数,貌似还没有出现什么字符不能显示的问题(我接触的邮件字符集目前只有GBK和GB18030两种,其他的暂时还没遇到)。但是总觉得不对字符集进行分析有些欠妥,但又找不到好的解决方案,望各位大侠不吝赐教!

 目前尚未完成的功能:
    对邮件内容自动进行合理地分段,确保能够合理地分开邮件的正文和附件(目前是手工分的)。但是解决的思路是有的,那就是根据----=和--这两个关键标记用正则表达式或者自己直接比较ASCII编码来实现自动分段,主要难度是要注意处理好分段标记的嵌套问题和算法的效率。感觉用正则好像不是特别好(其实也因为本人对正则表达式的使用水平很不到家),所以初步考虑还是用比较ASCII编码的方式进行分段。
    其他一些人性化的设计,目前好没有这方面的考虑,先解决上面的主要问题吧。

 还有一个最最关键的问题,做这样一个东西到底有没有意义?或者说是不是有人已经做了这样的东西了(当然作为一个锻炼编程水平的东西还是不错的)?另外,正如文章标题所说的,做出这样的东西能不能做到一种通用性,即根具体的邮箱服务器无关,只要是基于MIME协议就行?以上任何问题,只要您要自己的见解,都欢迎您做出论述,为小弟指点迷津,多谢! 软件 电子邮件 邮件 服务器 编码 --------------------编程问答-------------------- 直接给Outlook做二次开发就可以了,google MAPI。 --------------------编程问答-------------------- 谢谢你让我知道了有这样一个编程接口。问题是如果对方机子上没有Outlook或者不根本想装Outlook怎么办?还有就是这个MAPI是微软的标准,是否具有代表性呢?我其实想从MIME协议上去思考这个问题,所以最好是直接跟这个协议相关的资料,谢谢! --------------------编程问答-------------------- MIME不是协议,只是一种格式,哥哥。 --------------------编程问答-------------------- 可以说是格式,也可以说是协议,不矛盾的,侧重点不同而已。
百度结果:多用途网际邮件扩充协议(MIME)是 Multipurpose Internet Mail Extensions 的缩写,说明了如何安排消息格式使消息在不同的邮件系统内进行交换。 MIME 的格式灵活,允许邮件中包含任意类型的文件。 MIME 消息可以包含文本、图象、声音、视频及其它应用程序的特定数据。

另外上面的解析邮件头的问题已经解决了,现在主要的难题是字符集的转换问题。我发现编码方式为GB2312,GBK,GB18030的用StrConv转换后都可以正常显示,但是UTF-8不行,需要自己转码,目前正在研究这个问题。 --------------------编程问答-------------------- 你可以参考: http://blog.csdn.net/chenjl1031/article/details/6059767 --------------------编程问答-------------------- 恩,谢谢!正是我需要的。 --------------------编程问答--------------------
引用 楼主 TJ12580 的回复:
本人目前在尝试做这样一个东西,目的是可以在打开电脑联网时自动读取未读的邮件,提醒用户并且可以直接用软件自带的解析模块解析邮件,防止用户忽略一些重要的邮件。

 目前已经完成的功能:
 (1)能够对MIME协议的两种编码方式BASE64和Quoted-Printable编码的邮件内容正确地进行解析(包括正文和附件),已经通过多个邮箱多封邮件验证;
 (2)能够正确地分离邮件头和邮件内容;
 其他次要的就不说了。

 目前需要改进的功能:
 (1)对邮件头的某些属性不能完全正确地分段。例如:有些邮件的Subject、Content-Type属性值可能超过一行,那么如果按换行符作为属性值结束的标致就不完整;于是我自然而然地想到了以至少一个换行符和冒号作为结束标致,然后去掉最后一个换行符之后的内容,但是目前不敢肯定这种想法,因为属性值中既有换行符同时也出现冒号怎么办?(不知道有没有这种可能性,因为一般Subject都是经过编码的,冒号不会出现);后来我又想到了一种判断方法,那就是通过验证换行符后是否出现标准的MIME协议中规定的属性名称,例如From后面一般会出现To等等,只要前一个属性名称后出现标准协议中规定的属性名称中的任何一个则认为属性值结束。起初我以为这个想法应该万无一失了,结果发现并不是所有的POP服务器都是完全遵照MIME协议标准的,一般都附有服务器自带的属性名称,万一恰恰我关心的几个属性From,To,Subject,Content-Type中后面跟了一个我的软件中没有约定的属性名称,那就歇菜了。我本人对MIME协议不是理解得很透彻,网上资料也不多,所以我不确定是不是符合MIME协议的邮件的头中除了Date属性外,其余属性的属性值都不允许直接出现冒号,否则需要进行编码操作,这样可以确保解析邮件时不会出现意外。这是我的一个猜测,目前没被推翻,但不知道实际情况是否如此?所以请对这方面有研究的大侠冒个泡讨论下吧!
 (2)不同字符集之间的转换。我使用的是VB6.0的开发环境,有点落伍了,呵呵。所以转码什么的用的都是StrConv这个函数,貌似还没有出现什么字符不能显示的问题(我接触的邮件字符集目前只有GBK和GB18030两种,其他的暂时还没遇到)。但是总觉得不对字符集进行分析有些欠妥,但又找不到好的解决方案,望各位大侠不吝赐教!

 目前尚未完成的功能:
    对邮件内容自动进行合理地分段,确保能够合理地分开邮件的正文和附件(目前是手工分的)。但是解决的思路是有的,那就是根据----=和--这两个关键标记用正则表达式或者自己直接比较ASCII编码来实现自动分段,主要难度是要注意处理好分段标记的嵌套问题和算法的效率。感觉用正则好像不是特别好(其实也因为本人对正则表达式的使用水平很不到家),所以初步考虑还是用比较ASCII编码的方式进行分段。
    其他一些人性化的设计,目前好没有这方面的考虑,先解决上面的主要问题吧。

 还有一个最最关键的问题,做这样一个东西到底有没有意义?或者说是不是有人已经做了这样的东西了(当然作为一个锻炼编程水平的东西还是不错的)?另外,正如文章标题所说的,做出这样的东西能不能做到一种通用性,即根具体的邮箱服务器无关,只要是基于MIME协议就行?以上任何问题,只要您要自己的见解,都欢迎您做出论述,为小弟指点迷津,多谢!


代码能分享下么,我想学习你怎么写的,sexfio1@163.com   谢谢 --------------------编程问答-------------------- 代码比较长,一共两个类模块。一个负责解码,一个负责解析邮件。目前还差一个字符集的转换。你要的话,那我就发给你看下吧。
补充:VB ,  网络编程
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,