/*
Bibliothek zum Versenden von Mails aus der tdbengine heraus
läuft nur unter LinuxFreeBSD mit installiertem sendmail
http-User muss Shell haben und Ausführungsrecht für sendmail.
Als Mail-Host wird der Name aus der Environment-Variablen SERVER_NAME
verwendet, kann aber durch Überschreiben der Variablen the_host
geändert werden.
Logfile wird unter binmail.log geführt
Exportiert werden folgende Prozeduren:
MailRamText(receiver,subject,from : STRING)
receiver : EMail-adresse des Empfängers, es können auch mehrere Empfänger -
durch Leerzeichen getrennt - angegeben werden.
subject : Betreff
from : Absenderadresse (Domain sollte mit realem Domainnamen übereinstimmen)
MailFile(file,receiver,subject,from : STRING)
file : Textdatei mit Mailinhalt
subject : Betreff
from : Absenderadresse (Domain sollte mit realem Domainnamen übereinstimmen)
Achtung! file oder ramtext müssen im ANSI-Format sein
Erweiterung:
Sowohl MailFile als auch MailRamText können Mails in ein Spool-Verzeichnis schreiben.
Dieses Verzeichnis wird als globale Variable spool_dir defaultmäßig auf
"hometdbenginespoolmailmails" gesetzt, kann aber jederzeit geändert werden.
Wird die Variable do_spool auf 1 gesetzt, schreibt das Modul die Mails in's
Spoolverzeichnis und macht sonst nichts. In diesem Fall sollte ein Mailer-Dämon
in regelmäßigen Abständen diese Mails versenden.
Wichtiger Hinweis:
Falls die Spool-Variante verwendet wird, geben die exportierten Funktionen
alle bis zum Aufruf gültige Semaphoren frei und richten eigene ein.
Deshalb sollte hier der Mailversand ausserhalb von Transaktionen stattfinden.
*/
VARDEF mail_id, the_host : STRING
VAR do_spool : INTEGER = 0
VAR spool_dir : STRING = '/home/tdbengine/spoolmail/mails'
PROCEDURE spool_mail
VAR t, n, fc : INTEGER
VAR fn, sema : STRING
endsema
sema:='mails.lck'
IF NOT waitsema(sema,1000) THEN cgiwriteln(sema+': sema failed...') END
IF isfile(fn:=spool_dir+'/nextmail') THEN
t:=reset(fn); n:=val(readln(t)); close(t);
END
endsema
t:=rewrite(fn); writeln(t,str(n++)); close(t)
fn:=spool_dir+'/'+str(n)+'.msg'
fc:=copyfile(mail_id,fn)
// cgiwriteln('fc = '+str(fc))
ENDPROC
PROCEDURE Mail_File(file,receiver,subject,sender,host : STRING)
VAR t,f : INTEGER
IF receiver='' THEN
t:=tappend('bin/mail.log');
writeln(t,receiver+': '+sender+', '+oemtoansi(subject))
close(t)
RETURN
END
IF mail_id='' THEN mail_id:='mail.temp_'+str(random(10000))+'.'+str(random(10000)) END
t:=rewrite(mail_id)
writeln(t,'From: '+sender)
writeln(t,'To: '+receiver)
writeln(t,'Subject: '+oemtoansi(subject))
writeln(t,'MIME-Version: 1.0')
writeln(t,'Content-Type: text/plain;')
writeln(t,'')
f:=reset(file);
WHILE NOT EOT(f) DO write(t,read(f)) END
close(f); close(t);
IF do_spool
THEN spool_mail
ELSE CGIExec('sendmail -pSMTP:'+host+' -f '+sender+' '+receiver+' < '+mail_id+' >> /home/tdbengine/bin/mail.log')
END
DelFile(mail_id)
ENDPROC
PROCEDURE MailRamtext(receiver, subject, sender : STRING)
IF the_host='' THEN the_host:=getenv('SERVER_NAME') END
Mail_File('ramtext',receiver,subject,sender,the_host)
ENDPROC
PROCEDURE MailRamText(receiver, subject, sender : STRING)
MailRamtext(receiver,subject,sender)
ENDPROC
PROCEDURE mailramtext(receiver, subject, sender : STRING)
MailRamtext(receiver,subject,sender)
ENDPROC
PROCEDURE MailFile(file, receiver, subject, sender : STRING) : REAL
IF the_host='' THEN the_host:=getenv('SERVER_NAME') END
Mail_File(file,receiver,subject,sender,the_host)
RETURN 1
ENDPROC