最近给几个客户做邮件转发的小功能的开发,其实功能应该来说很简单,但是其中也出现了一些小问题,造成死循环,在这里给大家共享一下我的教训:
邮件转发无非有以下几种方式:
1、利用邮件的规则来处理:在邮件数据库工具--》规则中新建规则,将所有的邮件转发到一个指定的邮件地址即可。这样相对较简单,但是不是很灵活。
2、通过编程来实现,在邮件数据库中新建一个邮件到达前执行的定时代理,将邮件转发给相应的人员即可。类似下面的代码
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim newdoc As notesdocument
Set db=s.currentdatabase
Set doc=s.documentcontext
Set newdoc = db.CreateDocument
Call doc.CopyAllItems(newdoc, True)
newdoc.subject="Fwd: "& newdoc.subject(0)
newdoc.Sendto="abc"
Call newdoc.send(False)
但是没有考虑到收件人不仅仅是sendto,还有copyto,blindcoyto,一旦当copyto 或者blindcoyto有发件人的名字,则会迅速的产生死循环。最后导致服务器撑满,并且还会将所有的邮件发给相干人等(Sendto,copyto,blindcoyto)。所以一定要注意将copyto,blindcoyto清空。
3、还有一个情况,有人尝试将所有的邮件转发到自己的外网邮箱,但是邮件服务器又设置了发送邮件的附件最大大小,如果超过该限额,就会产生退信,这样也会死循环下去,最后我看到一个在windows平台数据库达到64G,最后没办法再发了,才停下来。这样可以做一些控制,如果是一些特殊的邮件就不进行转发,或者超过限额不让收信。
阅读(1289) | 评论(0) | 转发(0) |