好象在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
是啊,看了楼主的网络硬盘的功能,不知道能否给一个提示。
谢谢!!
<谢!!

