#Include %occInclude ;Send mail via SMTP-Mail-Server ; ;Parameters: ;SMTPServer = SMTP-Server IP ;from = Mailfrom ;to = MailTo (seperated with ,) ;CC = ccTo (seperated with ,) [opt] ;Subject = Mail-Subject Text ;Message = Message-Array Mail-Textrows (call by reference) ;Attachements = Attachements Array (call by reference) ; format : Directory;Filename (Files) ; or id1/id2/id3/... (DB-Dok.-Streams) Set SMTPServer="Notes01" Set from="test@vanhoecke.be" Set to="tr@vanhoecke.be" Set Subject="Embedded test" Set CC="" Set Attachements(1)="C:\WINDOWS;Blue Lace 16.bmp" If from=""!(to="")!(Subject="")!(SMTPServer="") q New Mailer,Msg,i,To,a,cc,sc ;Create an SMTP object and connect to a server Set Mailer = ##class(%Net.SMTP).%New() ;Fill in the name of mail server Set Mailer.smtpserver = SMTPServer ;Create a Message object and fill in From, To, Subject Set Msg = ##class(%Net.MailMessage).%New() ;Fill in an email address(es) from,to,cc Set Msg.From=from For i=1:1 Set To=$p(to,",",i) q:To="" do:To["@" . Do Msg.To.Insert(To) if CC'="" do . For i=1:1 Set cc=$p(CC,",",i) q:cc="" do:cc["@" . . Do Msg.Cc.Insert(cc) Set Msg.Subject=Subject ;Add message content s a="" F s a=$o(Message(a)) q:a="" Do . Do Msg.TextData.Write(Message(a)_$c(13,10)) ;Attachements s a="" F s a=$o(Attachements(a)) q:a="" Do . q:Attachements(a)="" . if $f(Attachements(a),";")=0 do AttachStream(Attachements(a)) Quit ;persistent Stream-Obj. . s dir=$p(Attachements(a),";",1),filename=$p(Attachements(a),";",2) ;Files . Do Msg.AttachFile(dir,filename) ;Send the message and close objects Set sc=Mailer.Send(Msg) Do Mailer.%Close() Do Msg.%Close() quit AttachStream(Ids) ;attach Streams to mail ; Ids: Doks-id's seperated with / n count,file,ext,stream,dok,doksid,msg,i,sFilename,Id s countDoks=$L(Ids,"/") ;&js for i=1:1:countDoks do . s msg=##class(%Net.MailMessagePart).%New() . s msg.IsBase64=1,stream=msg.BinaryData,msg.IsBinary=1 . s Id=$P(Ids,"/",i) . q:Id="" . s doks=##class(User.Doks).%OpenId(Id) ;pers. Dok.-Obj. . q:doks="" . s status=stream.CopyFrom(doks.DokStream) . i $$$ISERR(status) q . s count=Msg.Parts.Count()+1 . d Msg.Parts.SetAt(msg,count) . s Msg.IsMultiPart=1 . s sFilename=doks.DokFilename,sFilename=$P(sFilename,"\",$L(sFilename,"\")) . s msg.FileName=sFilename . d doks.%Close() . d msg.%Close() . quit quit