suchen/ersetzen in Schleife
dobra
- perl
Hallo,
Mein Problem:
Der Mailtext ($kdmailtext) wird aus einer .cfg Datei ausgelesen, die mail-Adresse, Anrede, Name usw. aus der DB.
Im Mailtext sollen jetzt -ANREDE- und -NAME- durch die Variablen aus der DB ersetzt werden.
Mein Versuch (gekürzte Form)
my $sql2 = qq |SELECT ANREDE, NAME FROM $dbtableuser WHERE GESENDET = 0 |;
my $read = ssp::readSQLData($sql2, "anrede", "name" );
if ($read > 0) {
for (my $i = 0; $i < $read; $i++) {
my $anrede = main::qform(ssp::get_var_db ("anrede",$i));
my $name = main::qform(ssp::get_var_db ("name",$i));
$kdmailtext =~ s/-ANREDE-/$anrede/g;
$kdmailtext =~ s/-NAME-/$name/g;
require HTML::Entities;
$decodedtext = HTML::Entities::decode($kdmailtext);
$decodedbetreff = HTML::Entities::decode($betreff);
$decodedfrom = HTML::Entities::decode($from);
my $prog = ssp::get_mailprog(); # Pfad zum Mailprogramm
open(MAIL,"|$prog -t");
print MAIL "From: $decodedfrom \n";
print MAIL "To: $sendmail\n";
print MAIL "Subject: $decodedbetreff\n\n";
print MAIL "$decodedtext";
close(MAIL);
print "OK, Mail an $sendmail/$anrede $name versandt...<br>";
my $sqlg = qq|UPDATE $dbtableuser SET GESENDET = "$jetzt" WHERE EMAIL = '$sendmail' AND ORDERNR = '$ordernr'|;
ssp::exec_sql($sqlg, 1);
}
}
Die Mails werden korrekt an die richtigen Adressen versendet und
print "OK, Mail an $sendmail/$anrede $name versandt...<br>";
gibt auch die richtigen Daten aus.
In ALLEN Mails wird aber -ANREDE- und -NAME- immer nur durch den ERSTEN gefundenen DB-Eintrag ersetzt.
Was mache ich falsch?
lg
dobra
Hi,
for (my $i = 0; $i < $read; $i++) {
my $anrede = main::qform(ssp::get_var_db ("anrede",$i));
my $name = main::qform(ssp::get_var_db ("name",$i));$kdmailtext =~ s/-ANREDE-/$anrede/g;
$kdmailtext =~ s/-NAME-/$name/g;
Ab dem ersten Schleifendurchlauf ist in $kdmailtext weder "-ANREDE-" noch "-NAME-" vorhanden, die sind ja durch die konkreten Werte ersetzt.
Beim zweiten/dritten/... Schleifendurchlauf gibt es in $kdmailtext also nichts mehr, was durch die neuen Werte ersetzt werden könnte.
Du müßtest am Schleifenanfang den $kdmailtext wieder auf den ursprünglichen Wert (den $kdmailtext vor der Schleife hatte) zurücksetzen.
cu,
Andreas
Hallo Andreas,
Du müßtest am Schleifenanfang den $kdmailtext wieder auf den ursprünglichen Wert (den $kdmailtext vor der Schleife hatte) zurücksetzen.
Vielen Dank!
DAS war mein Fehler ....
jetzt funktioniert's :D
lg
dobra
Hallo,
Der Mailtext ($kdmailtext) wird aus einer .cfg Datei ausgelesen, die mail-Adresse, Anrede, Name usw. aus der DB.
Im Mailtext sollen jetzt -ANREDE- und -NAME- durch die Variablen aus der DB ersetzt werden.
Ich würde das so machen:
package Letter;
sub new{
my $class = shift;
my $vars = shift;
my $letter = qq(
$vars->{Anrede},
$vars->{Text}
Mit freundlichen Grüßen
...
);
return bless {LETTER => $letter}, $class;
}
my $let = Letter->new({Anrede => $anrede, Text => $text});
$let->send(); # Funktion ist noch zu schreiben
Schöne Pfingsten,
Horst Heiligengeist