繁体中文
设为首页
加入收藏
当前位置:服务器技术首页 >> 邮件服务 >> 立下计划,为sqwebmail写一个邮件内容查找的hack

立下计划,为sqwebmail写一个邮件内容查找的hack

2004-11-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:好象在sqwebmail中没有实现邮件内容的查找,所以现在要实现这样的一个功能。 1、第一阶段,估计2周左右,查看相关资料,为“邮件查找”如何实现做些准备 2、总结第一阶段工作,根据以上成果来评估是否继续下去。...

好象在sqwebmail中没有实现邮件内容的查找,所以现在要实现这样的一个功能。

1、第一阶段,估计2周左右,查看相关资料,为“邮件查找”如何实现做些准备

2、总结第一阶段工作,根据以上成果来评估是否继续下去。

3、花二周时间来编写代码,并测试通过

请多位高手、大侠们提供一些指点。

此外,请勿怀太高期望。

毕竟现在只能在工作之余来完成。

不过,一旦完成,邮件搜索部分即当以代码形式公之于众。--前提是写完了。:)

gadfly 回复于:2003-08-28 09:58:44

应该可以的。

可以参考读信部分的代码。

涉及到内容解码的部分

erehw 回复于:2003-08-28 12:39:54

刚才有空看了一下rfc1521。决定自己来写解码的部分,不去看sqwebmail的部分了:原因是他的处理函数是为了将邮件显示而设计的,不大可能重用他的函数。

下面是我关于解码的一点小思路:

/**

*1、搜索相关目录得到文件名

*2、读入所有内容

*3、对From:与Subject:进行mime_word_decode解码

*4、找到字符串Content-Transfer-Encoding:

*5、然后读入后面的类别,只处理base64与quoted-printable两类

*6、对这两类内容进行解码。

*7、对处理后的结果进行搜索<先简单查找一个,只找一个词>

*

*/

由于对邮件各方面知之甚少,不知以上思路是否可以解决所有问题。

在rfc1521,对于Content-Transfer-Encoding的说明如下:

/*

encoding := "Content-Transfer-Encoding" ":" mechanism

mechanism := "7bit" ; case-insensitive

/ "quoted-printable"

/ "base64"

/ "8bit"

/ "binary"

/ x-token

*/

7bit应该不需要进行处理。

8it应该同样不需要处理。

binary则应该略过

x-token应该不去理睬。

所以只需要处理base64与quoted-printable两类。

这就是我的理解,不知道是否正确,请大侠们斧正。

erehw 回复于:2003-08-28 14:55:17

看来不行,还得考虑。

Content-Type: text/

只有在Content-Type: text/时才考虑去解码,刚才把图片文件给全解开来了。没有用处。

gadfly 回复于:2003-08-28 22:09:24

sqwebmail的编解码、遍历mime的rfc例库都有了,没有必要重新开发的。

erehw 回复于:2003-09-03 15:43:14

邮件搜索终于简单的做完了。

--其实几天前就搞定了,不是特别的满意。因为相对于其他许多商业的系统来说,实在过于简单。此外,对于一些特别的全外情况

都没有仔细考虑,不过,总得说来,毕竟可用了。

邮件搜索使用了一个外部类库:

http://prdownloads.sourceforge.net/libstrfunc/libstrfunc-7.4.7.tar.gz

其实大可以不使用这个库的,可实在是我对sqwebmail去了解的时间实在太少---仅仅在此之前,仅是将sqwebmail做了一个修改,

让其支持了多个用户签名。

说实在的话,这个libstrfunc类库的mime_word_decode函数有BUG。base64_decode解码有时也出问题,还好,在实验中,quoted_pr

intable_decode没有发现有问题---在我的程序中,于是便调用了这一个函数,这可实在是比较笨的解决方案了。

其他两类:如=?gb2312?= =AB==等等都调用的是sqwebmail中附带的函数。

总而言之,邮件搜索是可以跑起来了。

让我们接下去试试看。

一、首先请安装:

libstrfunc

安装很容易,

./configure --program-prefix=/usr

make

make install

二、新增了二个:html文件

&nbs

p;search.html与has_found.html

请将其放到正确的位置

三、修改sqwebmail.c

在作如下修改:

else if (strcmp(kw, "PREFWEEK") == 0)

{

pref_displayweekstart();

}

else if (strcmp(kw,"CS_SEARCH")==0)

//这行是新增的

{

//这行是新增的

cs_do_search();

//这行是新增的

} //这行是新增的

四:将两个新文件:cs_func.c与cs_func.h复制到sqwebmail目录

五、修改sqwebmail/Makefile.am

找到:sqwebmail_SOURCES=addressbook.c

在其中增加 cs_func.h cs_func.c

六、在sqwebmail目录运行autoconf

七、再次运行confgiure(注意要带选项)

8、修改sqwebmail/Makefile

找到:LIBS= -lcrypt

修改成: LIBS= -lstrfunc -lcrypt

回到上级目录,执行make、编译即可。

最后:wmail/wm/?folder=INBOX&form=search

就应该就可以运行了。

BTW:我是修改了wmail.

-------------

[size=18:19812e069c][b:19812e069c]此外,附件包中,还附带了自动回复的程序。[/b:19812e069c][/size:19812e069c]

欢迎来信:erehw@163.com msn:erehw@163.com

邮件查找的结果

邮件查找的页面的

erehw 回复于:2003-09-03 15:46:23

不能附带zip文件,大家到这儿去下载吧:

如果不能下载的话,请第二天再来---公司的机器,有可能停电

http://shanji.com/mailsearch.zip

此外,正在做pop收件,代码已经写完,正在测试中。

pop收件

sxqw 回复于:2003-09-04 17:49:55

好兄弟,辛苦了!

peijun.jiang 回复于:2003-09-04 18:24:02

[quote:86c4a97965="sxqw"]好兄弟,辛苦了![/quote:86c4a97965]

辛苦 --支持。

希望继续尽快推出,到时候我们的webmail就有更完善的用了。呵呵

erehw 回复于:2003-09-05 09:34:39

没时间了。。。。。。。。。。。。。。。

有一个比较大的开发项目上马了。

此外,发现还是花一些时间去解决那个smtp-auth认证,关于本域的问题。

现在,谁都可以使用我的webmaster@...发给我本域的用户。

有志于解决这个问题的兄弟们来讨论一下。

msn:erehw@msn.com

欢迎参观我的mail:

http://allsso.com

可以自由注册。。。

用户test,密码testtest

IPphone 回复于:2003-09-05 15:44:05

qmail 中对本域用户的发信认证之前 gadfly 已经做了一个补丁了啊,我一直在用。

erehw 回复于:2003-09-05 16:12:05

gadfly的patch今天在peijun.jiang的帮助下(我以前没有完整的文件)

pathch打上以后,

运行

telnet allsso.com 25

mail from:test@allsso.com

rcpt to:c

s@allsso.com

data

这个操作是完全可以发信的,也就是谁都可以不知道test@allsso.com的密码,而借用他的名义给本域内的所有人发信了。

这要比发给其他域的安全问题大多了。

(此外,我也不知道是否是我patch安装的问题,反正我的系统中存在这个问题)

---------------------

我通过刚才看代码

对自己的patch作了如此修改:

在smtp_auth_validfrom中

将 if (!authd) return 1; 改成

[code:1:d99d645370]

if(!authd)

{

if(rcpthosts(from,str_len(from)) )

return 0;

else

return 1;

}

[/code:1:d99d645370]

这样就可以需要验让才可以发给本域了。

不知道是否有什么别的问题。

希望gadfly能发表一下他的意见。。

(我才最近一个月,业余时间来搞搞qmail)。

<开个新贴讨论>

[/code]

gadfly 回复于:2003-09-05 16:20:41

哦,peijun给你的不是最新的。

我最新的patch对本域发本域是需要认证的。

方法和你说的差不多。

具体你可以看看我前面的精华区的文章

erehw 回复于:2003-09-05 17:20:46

谢谢gadfly。

最好是您的大作能够提供一下http下载,实在不行,我来帮你开一个ftp供你上传。http供下载。。

不好意思,没仔细看你后面贴上的patch,

确实才发现你改过了。

gadfly 回复于:2003-09-05 20:01:10

好的,我的确没有ftp站点,要不你给个ftp吧。

谢谢

erehw 回复于:2003-09-06 09:19:40

我正在看资料,看如何将proftpd与httpd结合起来配置成虚拟主机。

顺便看什么样的ftp比较好。。。。

配置好了,再告诉你。

sxqw 回复于:2003-09-06 09:56:17

我看了你的webmail,做的挺好,能不能共享一下呢?

erehw 回复于:2003-09-06 11:38:27

to sxqw:

如果你是一个程序员,那么在上面我差不多把我写的代码都公布了。(别人写的我没权利公开)

我的界面挺好看,都是wmail的功劳。

如果你不是一个程序员,现在我们所完成的也只是一个半成品(很多代码都没有经过严格的测试,还有大部分没有完成),只怕您要安装也会比较麻烦。

希望您能够理解。

sxqw 回复于:2003-09-06 12:38:04

只恨自己不是程序员

理解

erehw 回复于:2003-09-06 12:55:49

我也理解那种见猎心喜,欲得而烹之尝之的感觉。

--BTW:做程序员一点也不算好。。。。。。。。。。。。。。

sxqw 回复于:2003-09-06 13:13:14

我是搞网络设备的

各有各的乐趣各有各的苦吧! :)

erehw 回复于:2003-09-06 15:02:19

to gadfly:

你可以使用这个ftp了。

ftp gadfly.shanji.com

用户名:gadfly

密码:暂时是qmailqmail

你可以使用http来访问

http://gadfly.shanji.com

这台机器是我挂在公司的pc server---我用来做试验的linux机器

只要我的allsso.com存在,这个就会存在。

可以作为你或别人中转一些小文件(只开了100M空间),此外,如果要下载较多,请在晚上操作。谢谢。

gadfly 回复于:2003-09-07 22:24:16

非常感谢。

不过现在我也就两个文件可放:

ftp://gadfly:qmailqmail@gadfly.shanji.com/qmail-smtpd/下的

qmail-smtpd.c和qmail-smtpd.patch

前者是www.nimh.org/hacks/qmail-smtpd.c

老是有人问,我就留下了。

这个patch对新版本的qmail-smtpd.c应该也适用。

为了安全起见,如果方便得话,你不一定要开放ftp访问这两个文件,可以用

http方式。这样等我我需要的话,可以再向你请求ftp空间。看你的意见了。

再次感谢。

erehw 回复于:2003-09-08 10:44:50

只要你上传的文件都可以通过

http来访问:

http://gadfly.shanji.com/qmail-smtpd/qmail-smtpd.patch

http://gadfly.shanji.com/qmail-smtpd/qmail-smtpd.c

你最好能上传一个index.html文件。

h

oho

gadfly 回复于:2003-09-08 18:45:53

好了,index做好了

artxing 回复于:2003-09-09 15:59:38

七、再次运行confgiure(注意要带选项)

configure要注意的选项是什么?

我修改了Makefile.am回到上一级目录执行make后,返回了错误信息

cs_func.o(.text+0xa42): In function `cs_search_box':

/home/wangxu/software/wmail-1.00rc1.20030724/sqwebmail/cs_func.c:488: undefined

reference to `cs_get_my_path'

collect2: ld returned 1 exit status

make[3]: *** [sqwebmail] Error 1

make[3]: Leaving directory `/home/wangxu/software/wmail-1.00rc1.20030724/sqwebma

il'

make[2]: *** [all-recursive] Error 1

make[2]: Leaving directory `/home/wangxu/software/wmail-1.00rc1.20030724/sqwebma

il'

make[1]: *** [all] Error 2

make[1]: Leaving directory `/home/wangxu/software/wmail-1.00rc1.20030724/sqwebma

il'

make: *** [all-recursive] Error 1

这是怎么回事?

artxing 回复于:2003-09-09 22:58:18

还有一点问题.我用了你的自动回复的程序,发现好象有点问题.

autoresponse.c中没有建立vacation这个目录.而这个目录是用来存放回复信息的message的.

erehw 回复于:2003-09-10 17:22:18

sorry。有点bug.不过已经改过了。

你重新下载试试。------没用心去写程序。

cs_get_my_path 这个函数定义在autoresponse.c中。

artxing 回复于:2003-09-10 17:23:53

呵呵~谢谢

artxing 回复于:2003-09-10 23:09:11

七、再次运行confgiure(注意要带选项)

这个是要带什么选项呢?

hzleihuan 回复于:2003-09-11 08:19:37

我想打听一下,这个网络硬盘的功能是怎么来着?

erehw 回复于:2003-09-11 09:43:17

就是你安装sqwebmail应该带的选项,。。。

-------------

artxing 回复于:2003-09-11 09:44:24

我是直接安装的wmail.没带什么选项哦

应该是一样的, 可是我就是编译不成功

artxing 回复于:2003-09-11 10:55:57

我最后一步make出错,出错信息

Compiling cs_func.c

In file included from cs_func.c:39:

cs_func.h:31:7: warning: no newline at end of file

cs_func.c: In function `cs_show_parts':

cs_func.c:63: warning: int format, off_t arg (arg 2)

cs_func.c:64: warning: int format, off_t arg (arg 2)

cs_func.c: In function `cs_check':

cs_func.c:78: warning: passing arg 2 of `rfc2045_mimepos' from incompatible poin

ter type

cs_func.c:78: warning: passing arg 3 of `rfc2045_mimepos' from incompatible poin

ter type

cs_func.c:78: warning: passing arg 4 of `rfc2045_mimepos' from incompatible poin

ter type

cs_func.c:78: warning: pas

sing arg 5 of `rfc2045_mimepos' from incompatible poin

ter type

cs_func.c:78: warning: passing arg 6 of `rfc2045_mimepos' from incompatible poin

ter type

cs_func.c: In function `cs_check_body':

cs_func.c:139: warning: passing arg 2 of `rfc2045_mimeinfo' from incompatible po

inter type

cs_func.c:139: warning: passing arg 3 of `rfc2045_mimeinfo' from incompatible po

inter type

cs_func.c:139: warning: passing arg 4 of `rfc2045_mimeinfo' from incompatible po

inter type

cs_func.c:165: warning: implicit declaration of function `quoted_printable_decod

e'

cs_func.c:165: warning: initialization makes pointer from integer without a cast

cs_func.c: In function `cs_debug':

cs_func.c:228: warning: declaration of `p' shadows a parameter

cs_func.c:232: warning: passing arg 1 of `rfc2045_mimepos' from incompatible poi

nter type

cs_func.c:234: warning: int format, off_t arg (arg 2)

cs_func.c:234: warning: int format, off_t arg (arg 3)

cs_func.c:234: warning: int format, off_t arg (arg 4)

cs_func.c:234: warning: int format, off_t arg (arg 5)

cs_func.c:234: warning: int format, off_t arg (arg 6)

cs_func.c:238: warning: assignment from incompatible pointer type

cs_func.c:261: warning: int format, off_t arg (arg 2)

cs_func.c:261: warning: int format, off_t arg (arg 3)

cs_func.c:262: warning: int format, off_t arg (arg 4)

cs_func.c:276: warning: int format, off_t arg (arg 2)

cs_func.c:277: warning: int format, off_t arg (arg 2)

cs_func.c:224: warning: unused variable `header'

cs_func.c:224: warning: unused variable `value'

cs_func.c:225: warning: unused variable `save_subject'

cs_func.c:226: warning: unused variable `save_date'

cs_func.c:228: warning: unused variable `newpart'

cs_func.c:230: warning: unused variable `pos'

cs_func.c:228: warning: `p' might be used uninitialized in this function

cs_func.c: In function `wri

te_url':

cs_func.c:365: warning: unused variable `folder_index_entry_start'

cs_func.c:366: warning: unused variable `folder_index_entry_end'

cs_func.c:322: warning: unused variable `i'

cs_func.c:328: warning: unused variable `selectalllab'

cs_func.c: In function `cs_search_box':

cs_func.c:486: warning: implicit declaration of function `get_msgfilename'

cs_func.c:486: warning: initialization makes pointer from integer without a cast

cs_func.c:464: warning: unused variable `i'

cs_func.c:464: warning: unused variable `found'

cs_func.c:469: warning: unused variable `beforelab'

cs_func.c:469: warning: unused variable `afterlab'

cs_func.c:470: warning: unused variable `nomsg'

cs_func.c:470: warning: unused variable `selectalllab'

cs_func.c:471: warning: unused variable `qerrmsg'

cs_func.c: In function `cs_do_search':

cs_func.c:665: warning: implicit declaration of function `xlate_mdir'

cs_func.c:665: warning: assignment makes pointer from integer without a cast

cs_func.c:666: warning: implicit declaration of function `countcurnew'

cs_func.c:731: warning: implicit declaration of function `list_folder'

gcc -I/home/vpopmail/include -g -O2 -Wall -I.. -I./.. -o sqwebmail addressbo

ok.o args.o attachments.o auth.o autoresponse.o buf.o filter.o folder.o gpg.o ht

ml.o ldaplist.o logindomainlist.o maildir.o mailfilter.o mailinglist.o newmsg.o

newmsg_create.o newmsg_newdraft.o pref.o rfc2646html.o sqconfig.o sqwebmail.o to

ken.o cs_func.o ../maildir/libmaildir.a ../rfc2045/librfc2045.a ../rfc822/libr

fc822.a ../http11/libhttp11.a ../cgi/libcgi.a ../authlib/libauth.a ../ldapaddres

sbook/libaddressbook.a ../gpglib/libgpg.a ../unicode/libunicode.a ../random128/l

ibrandom128.a ../md5/libmd5.a ../numlib/libnumlib.a ../gdbmobj/libgdbmobj.a `cat

../authlib/libauth.dep` -lgdbm -lcrypt -L/home/vpopmail/lib -lvpopmail -lm -l

strfunc -lcrypt

cs_func.o(.text+0x83e): In function `write_url':

/home/wangxu/software/wmail-1.00rc1.20030724/sqwebmail/cs_func.c:422: undefined

reference to `folder_msg_unlink'

cs_func.o(.text+0x8d3)

:/home/wangxu/software/wmail-1.00rc1.20030724/sqwebmail/cs

_func.c:449: undefined reference to `folder_msg_unlink'

collect2: ld returned 1 exit status

make[3]: *** [sqwebmail] Error 1

make[3]: Leaving directory `/home/wangxu/software/wmail-1.00rc1.20030724/sqwebma

il'

make[2]: *** [all-recursive] Error 1

make[2]: Leaving directory `/home/wangxu/software/wmail-1.00rc1.20030724/sqwebma

il'

make[1]: *** [all] Error 2

make[1]: Leaving directory `/home/wangxu/software/wmail-1.00rc1.20030724/sqwebma

il'

make: *** [all-recursive] Error 1

sxqw 回复于:2003-09-11 11:09:19

[quote:1d6ca779d5="erehw"]就是你安装sqwebmail应该带的选项,。。。

-------------[/quote:1d6ca779d5]

带什么选项呢? 我 ./configure --help 也没查到你说的选项呀!

erehw 回复于:2003-09-11 13:18:35

[quote:d0d1fdaa47="sxqw"]

带什么选项呢? 我 ./configure --help 也没查到你说的选项呀![/quote:d0d1fdaa47]

那只是我随便举的例子,

真是不明白,这么简单的东西,为什么不多看看文档?

./configure --prefix=$PREFIX/wmail

--enable-cgibindir=$PREFIX/wmail/www/cgi-bin

--enable-imagedir=$PREFIX/wmail/www/image

--enable-imageurl=/image

--with-cachedir=$PREFIX/wmail/var/cache

--enable-webpass=no

--without-ispell

--with-maxmsgsize=5242880 --with-maxformargsize=5000000

--enable-maxpurge=7

--without-authpam --without-authuserdb --without-authpwd --without-authshadow

--without-authldap --without-authdaemon --with-authvchkpw

--with-defaultlang=zh-cn --enable-unicode

--with-fcgi

--enable-https=auto

--with-cacheowner=vpopmail

以上,只是我在安装vpopmail时的选项,不要生搬硬造,自己仔细看看。

此外,楼上的楼上,说那个449: undefined reference to `folrmgunlink''''

你可以自己想想办法呀?写程序就是这样的,不能什么都

要靠别人,要机灵一点,(说实话,要是我的手下都是这样,立马就推到别的部门或别人那儿去了)。

folder_msg_unlink是folder.c中定义的,不过他的前面有一个static,

你知道如何处理了吗?

sxqw 回复于:2003-09-11 13:24:53

我是说哪个参数是配置“网络硬盘”的?

你的配置参数也是我安装时用的,我装完的确没有“网络硬盘”呀!

./configure --help 中也没说明呀

erehw 回复于:2003-09-11 13:34:35

晕。谁告诉你有网络硬盘了?

sxqw 回复于:2003-09-11 13:46:14

[quote:04ce1ecadb="hzleihuan"]我想打听一下,这个网络硬盘的功能是怎么来着?[/quote:04ce1ecadb]

这是别人问你的,你说 “就是你安装sqwebmail应该带的选项,。。。 ”

就在本页最上面

那你的网络硬盘是如何实现的呢?

你用系统帐号吗?

hzleihuan 回复于:2003-09-11 14:00:06

那个是他回答你的。sqwebmail里没有网络硬盘这个功能的。要自己加的。我正想着加

inetmad 回复于:2003-09-13 20:55:29

对搂主的网络disk比较感兴趣,能不能公布一下实现方法

artxing 回复于:2003-09-13 21:06:21

是我太笨了吧

邮件搜索我怎么都编译不成功,不知道有没有人试过。

sxqw 回复于:2003-09-13 21:20:26

我也没编译成功, 遗憾。。。

tyrone_p 回复于:2004-04-07 08:49:02

=?gb2312?= =AB== 这种调用什么方法解的?

hongfengyue 回复于:2005-07-09 19:39:51

是啊,看了楼主的网络硬盘的功能,不知道能否给一个提示。

谢谢!!

<谢!!

责任编辑:admin
相关文章