问题描述
我写了一个定时发邮件的代理,但手动运行是OK的,能发出邮件,但定时运行是不能发出邮件,查看Log属于正常,在规定的时间有运行,请各位高手帮忙解决,代码如下(是一个文件批核程序,需定时向待批核人发送邮件提醒):SubInitializeDimsessionAsNewNotesSessionDimdbAsNotesDatabaseDimcollectionAsNotesDocumentCollectionDimDocumentAsNotesDocumentSetdb=session.CurrentDatabaseDimdateTimeAsNewNotesDateTime("")dateTime.LSLocalTime=NowDate$=dateTime.DateOnlysearchFormula$={eStatus="Approve1"|eStatus="Approve2"|eStatus="Approve3"|eStatus="Approve4"|eStatus="Sign"|eStatus="MEApprove"|eStatus="Modification"&DocType="MEItemForm"&vStatus!="删除"}Setcollection=db.Search(searchFormula$,Nothing,0)SetDocument=collection.GetFirstDocument()WhileNot(DocumentIsNothing)SendTo=""tRequestName=Document.tRequestName(0)IfDocument.eStatus(0)="Approve1"ThenSendTo=Document.ApprovalBy(0)tTitle="WaitforApproval"ElseifDocument.eStatus(0)="Approve2"ThenSendTo=Document.ManagerBy(0)tTitle="WaitforApproval"ElseifDocument.eStatus(0)="Approve3"ThenSendTo=Document.GManagerBy(0)tTitle="WaitforApproval"ElseifDocument.eStatus(0)="Approve4"ThenSendTo=Document.MManagerBy(0)tTitle="WaitforApproval"ElseifDocument.eStatus(0)="Sign"ThenSendTo=Document.SignBy(0)tTitle="WaitforSign"ElseifDocument.eStatus(0)="MEApprove"ThenSendTo=Document.tApproveBy(0)tTitle="WaitforDisposal"ElseifDocument.eStatus(0)="MECheck"ThenCalldatetime.adjustDay(1)IfDocument.tICompleteDate(0)=<datetime.DateOnlyThenSendTo=Document.tApproveBy(0)tTitle="WaitforDisposal"ElseExitSubEndIfElseifDocument.eStatus(0)="MECheck"ThenCalldatetime.adjustDay(-1)IfDocument.tICompleteDate(0)=<datetime.DateOnlyThenSendTo="JimmyZhang/ME2-OP1/DG-PCPartner@DG-PCPARTNER"tTitle="WaitforDisposal(此项目已经超过预计完成日期一天以上)"ElseExitSubEndIfElseifDocument.eStatus(0)="Modification"ThenSendTo=Document.tEnglishName(0)tTitle="WaitforModification"EndIfDimnewDocAsNotesDocumentDimrtitemAsNotesRichTextItemDimsdocAsNotesDocumentSetsdoc=DocumentSetnewDoc=NewNotesDocument(db)Setrtitem=NewNotesRichTextItem(newDoc,"Body")Callrtitem.AppendText("Clickonthelinktoaccessthedocument")Callrtitem.AppendDocLink(sdoc,sdoc.Subject(0))newDoc.Form="Memo"newDoc.Subject="(系统自动邮件提示!)"+"设备/工具/积架/工程申请--申请人:"+tRequestName+"--"+tTitlenewDoc.SendTo=SendTonewDoc.Send(False)SetDocument=collection.GetNextDocument(Document)WendExitSubEndSub
解决方案
解决方案二:
可能是服务器的时间格式与你的本机时间格式不一样,这个语句不太保险:IfDocument.tICompleteDate(0)=<datetime.DateOnlyThen由于是文本比较,服务器的时间格式与你的本机保存的文本型时间值格式可能不等(即使相同日期)。最好用时间值做比较,如果必须用文本作比较,那就在代码里确保tICompleteDate的格式是与"20100319"类似的写法,然后比较的时候把datetime先转换为这个格式再比较。
解决方案三:
除了二楼说的这个原因之外,还可以考虑一下是不是因为服务器所在的环境和邮件接收者的邮箱服务器之间是不是通的。因为手动运行的时候其实是用本地作为服务器。
解决方案四:
将调试语句详细化,分析具体究竟是哪步出了问题,这么一大堆代码真的很不好分析。
解决方案五:
捕捉一下Error生成一条日志,根据这个去查找具体运行到哪一行有问题再调整~