Tested with opsi 4.0.2
required WInst Version: 4.11.3
By Frank Thommen, 2014/01/10 11:13
This script requires blat which can be downloaded from http://www.blat.net/.
Usage instructions see below in UseSendMail.sub
Tree:
%SCRIPTDRIVE%\lib\ ├ UseSendMail.sub ├ SendMail_Variables.opsiinc ├ SendMail_Functions.opsiinc └ blat311\ ├ docs\ │ └ [...] └ bin\ ├ blatdll.h ├ blat.lib ├ blat.dll └ blat.exe
; ; ----------------------------------------------------------- ; UseSendMail.sub - send file, string or stringlist as mail ; ----------------------------------------------------------- ; ; AUTHOR: Frank Thommen, EMBL Heidelberg ; SHORTNAME (for variable names): mail ; ; PREREQUISITE: blat from http://www.blat.net ; ; ; PURPOSE: Send a mail using "blat". The content of the mail ; can be taken from ; ; * a stringlist (each element will become a line ; of the mailbody ; * a string (this will result in a one-line mail) ; * a textfile (the content will become the mailbody) ; ; The mail subject is user-defined, while sender and ; destination address are harcoded in this version. ; Therefore this version rather qualifies for sending ; status mails to a fixed address rather than being a ; freely configurable mailer. However this could easily ; be achieved by adding more user-definable variables. ; ; ; USAGE: ; Sub "%SCRIPTDRIVE%\lib\UseSendMail.sub" ; Set $_mail.subject = "Your Mail Subject" ; ; Set $_mail.msgtype = "stringlist" ; Set $_mail.msgstrlist = <some stringlist cmd> ; or ; Set $_mail.msgtype = "string" ; Set $_mail.msgstring = "Hello, how are you?" ; or ; Set $_mail.msgtype = "file" ; Set $_mail.msgfile = "C:\some\file.txt" ; ; Sub_SendMail ; ; ; HISTORY: 10-JAN-2014: Initial version ; ; include_insert "%SCRIPTDRIVE%\lib\SendMail_Variables.opsiinc" include_append "%SCRIPTDRIVE%\lib\SendMail_Functions.opsiinc"
DefVar $_mail.msgtype DefStringList $_mail.msgstrlist DefVar $_mail.msgstring DefVar $_mail.msgfile DefVar $_mail.subject
[sub_SendMail] if ($_mail.msgtype = "file") WinBatch_Mail_SendMailFromFile else if ($_mail.msgtype = "stringlist") ; avoid error message in case this function is used more then once ; within script ScriptErrorMessages = off DefVar $__mail.msgfile ScriptErrorMessages = on ; Create temporary filename and encode to get rid of ; special characters which might not be allowed in filenames Set $__mail.msgfile = "C:\tmp\" + base64EncodeStr(RandomStr) + ".tmpmail" if ( FileExists($__mail.msgfile) ) PAUSE "ERROR: File " + $__mail.msgfile + " already exists. Please inform <YOUR CONTACT HERE> about this error" else for %s% in $_mail.msgstrlist do DosInAnIcon_Mail_DumpToFile if NOT( FileExists($__mail.msgfile) ) PAUSE "ERROR: Mailfile " + $__mail.msgfile + " could not be created. Please inform <YOUR CONTACT HERE> about this error" else WinBatch_Mail_SendMailFromLocalFile Files_Mail_DeleteMsgFile endif endif else if ($_mail.msgtype = "string") WinBatch_Mail_SendMailFromString else PAUSE "ERROR: Unknown Messagetype! Please inform <YOUR CONTACT HERE> about this error" endif endif endif ; ; ---------------------------------------------------------- ; [DosInAnIcon_Mail_DumpToFile] IF NOT "%s%"=="" ( ECHO %s% >> "$__mail.msgfile" ) ELSE ( ECHO. >> "$__mail.msgfile" ) [Files_Mail_DeleteMsgFile] del -f "$__mail.msgfile" [WinBatch_Mail_SendMailFromFile] "%SCRIPTDRIVE%\lib\blat311\bin\blat.exe" "$_mail.msgfile" -serverSMTP smtp.your.domain -f "Name <email@ddress>" -to "Name <email@ddress>" -subject "$_mail.subject" [WinBatch_Mail_SendMailFromString] "%SCRIPTDRIVE%\lib\blat311\bin\blat.exe" - -serverSMTP smtp.your.domain -f "Name <email@ddress>" -to "Name <email@ddress>" -subject "$_mail.subject" -body "$_mail.msgstring" [WinBatch_Mail_SendMailFromLocalFile] "%SCRIPTDRIVE%\lib\blat311\bin\blat.exe" "$__mail.msgfile" -serverSMTP smtp.your.domain -f "Name <email@ddress>" -to "Name <email@ddress>" -subject "$_mail.subject"