Avatar billede perh Juniormester
05. juli 2000 - 23:34 Der er 14 kommentarer og
1 løsning

sende dele af form til forskellige modtagere?

Jeg har et system med en indkøbskurv.
De enkelte linier i denne skal sendes til forskellige modtagere.

Jeg har prøvet noget lignende dette:
--------------------------
#!/usr/bin/perl
print "Content-type:text/html\n\n";
$mailprog = '/usr/sbin/sendmail';

$redirect = 'http://www.detdomaine.dk/tak.html';

$haslemail = 'hasle@xxx.dk';
$fredbmail = 'fred@xxx.dk';

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);

foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s/~!/ ~!/g;
    $FORM{$name} = $value;
}

########### modtager1############

open (MAIL, "|$mailprog -t") or dienice("Can't access $mailprog!\n");
print MAIL "To: $haslemail\n";
print MAIL "Reply-to: $FORM{'email'} ($FORM{'navn'})\n";
print MAIL "Subject: CYKEL BOOKING\n\n";
print MAIL "$FORM{'navn'}\n$FORM{'Adresse'} \n$FORM{'Postnr'} $FORM{'By'}\n$FORM{'Land'}\n$FORM{'Telefon'} $FORM{'Fax'}\n$FORM{'email'}\nbestiller følgende ophold hos modtager1...\n\n";
foreach $key (keys(%FORM)) {
if ($FORM{$key} =~ /hasle/i){
    print MAIL "$key = $FORM{$key}\n\n";
    }
}
close(MAIL);

########## modtager2############

open (MAIL, "|$mailprog -t") or dienice("Can't access $mailprog!\n");
print MAIL "To: $fredbmail\n";
print MAIL "Reply-to: $FORM{'email'} ($FORM{'navn'})\n";
print MAIL "Subject: CYKEL BOOKING\n\n";
print MAIL "$FORM{'navn'}\n$FORM{'Adresse'} \n$FORM{'Postnr'} $FORM{'By'}\n$FORM{'Land'}\n$FORM{'Telefon'} $FORM{'Fax'}\n$FORM{'email'}\nbestiller følgende hos modtager2 ...\n\n";
foreach $key (keys(%FORM)) {
if ($FORM{$key} =~ /griffen/i){
    print MAIL "$key = $FORM{$key}\n\n";
    }
}
close(MAIL);

..........osv

dette sender en mail uanset om der er indhold eller ej.

Jeg ved ikke, hvordan sendmail virker er det nødvendigt at åbne og lukke det for hver mail?

Og er der en smart måde at få delt posten op og sendt ud på?



Avatar billede y2k Nybegynder
05. juli 2000 - 23:39 #1
du kan godt sende til to personer på samme tid i sendmail, hvis det samme brev skal sendes til bruger1 og bruger2, skal du skrive "To: bruger1, bruger2"..
ydermere kan du sætte en if (defined($FORM{'navn'}) {} ind, som så kun sender mail hvis der er skrevet et navn
Avatar billede y2k Nybegynder
05. juli 2000 - 23:41 #2
sådan kunne en del af scriptet se ud:
#!/usr/bin/perl
print "Content-type:text/html\n\n";
$mailprog = '/usr/sbin/sendmail';

$redirect = 'http://www.detdomaine.dk/tak.html';

$haslemail = 'hasle@xxx.dk';
$fredbmail = 'fred@xxx.dk';

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);

foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s/~!/ ~!/g;
    $FORM{$name} = $value;
}

if (defined($FROM{'navn'})) {
open (MAIL, "|$mailprog -t") or dienice("Can't access $mailprog!\n");
print MAIL "To: $haslemail, $fredbmail\n";
print MAIL "Reply-to: $FORM{'email'} ($FORM{'navn'})\n";
print MAIL "Subject: CYKEL BOOKING\n\n";
print MAIL "$FORM{'navn'}\n$FORM{'Adresse'} \n$FORM{'Postnr'} $FORM{'By'}\n$FORM{'Land'}\n$FORM{'Telefon'} $FORM{'Fax'}\n$FORM{'email'}\nbestiller følgende hos modtager2 ...\n\n";
foreach $key (keys(%FORM)) {
if ($FORM{$key} =~ /griffen/i){
    print MAIL "$key = $FORM{$key}\n\n";
    }
}
close(MAIL);
}
Avatar billede perh Juniormester
06. juli 2000 - 00:07 #3
takker, men det er forskellige dele af formmailen , der skal sendes til forskellige modtagere.

jeg bruger
if ($FORM{$key} =~ /detteord/i){
    print MAIL "$key = $FORM{$key}\n\n";
    }
til at sende alle (key,value)-sæt, som indeholder "detteord" til en bestemt modtager.

Så det skal op at stå over:
open (MAIL, "|
Mit problem er også, at som det er nu bliver kun de første tre breve , ud af tolv, sendt?
Avatar billede y2k Nybegynder
06. juli 2000 - 12:59 #4
#!/usr/bin/perl
print "Content-type:text/html\n\n";
$mailprog = '/usr/sbin/sendmail';

$redirect = 'http://www.detdomaine.dk/tak.html';

$mail{'hasle'} = 'hasle@xxx.dk'; $ord{'hasle'} = 'hasle';
$mail{'fredb'} = 'fred@xxx.dk'; $ord{'fredb'} = 'griffen';

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);

foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s/~!/ ~!/g;
    $FORM{$name} = $value;
}
foreach ('hasle','fredb') {
if (defined($FROM{'navn'})) {
open (MAIL, "|$mailprog -t") or dienice("Can't access $mailprog!\n");
print MAIL "To: $mail{$_}\n";
print MAIL "Reply-to: $FORM{'email'} ($FORM{'navn'})\n";
print MAIL "Subject: CYKEL BOOKING\n\n";
print MAIL "$FORM{'navn'}\n$FORM{'Adresse'} \n$FORM{'Postnr'} $FORM{'By'}\n$FORM{'Land'}\n$FORM{'Telefon'} $FORM{'Fax'}\n$FORM{'email'}\nbestiller følgende hos modtager2 ...\n\n";
foreach $key (keys(%FORM)) {
if ($FORM{$key} =~ /$ord{$_}/i){
    print MAIL "$key = $FORM{$key}\n\n";
    }
}
close(MAIL);
}}
Avatar billede kirkeby Nybegynder
07. juli 2000 - 22:59 #5
y2k :
Kan du ik´lave en mail formel til mig der skal sende en mail til dem der udfylder formlen, og en til mail....

Jeg vil gerne give 100+ points...  :)
Mvh Jesper
Avatar billede perh Juniormester
08. juli 2000 - 13:29 #6
y2k:

Det er en meget fin løsning, som fungerer godt.

Jeg har 8 mulige modtagere til felterne fra formularen.
Nogen af dem skal have samlet felter med forskellige kendeord.
Er det muligt at definere flere kendeord til hver modtager?
Kan man også få indsat de forskellige virksomhedsnavne i stedet for "modtager2"
Det ville være elegant, men ikke nødvendigt.

Jeg giver 60 points mere for det.
Avatar billede y2k Nybegynder
08. juli 2000 - 18:15 #7
med hensyn til det der med modtager to, så kan du f.eks. lave variablerne $modtager{'hasle'} = "Hvad modtageren nu engang hedder";
$modtager{'fredb'} = "Hvad modtageren nu engang hedder";
og så skrive $modtager{$_} istedet for modtager2.

det med kendeordene kan løses således:
$ord{'hasle'} = 'kendeord1,kendeord2,kendeord3';

istedet for
foreach $key (keys(%FORM)) {
if ($FORM{$key} =~ /$ord{$_}/i){
    print MAIL "$key = $FORM{$key}\n\n";
    }
}

skriver du så istedet:

foreach $key (keys(%FORM)) {
  foreach $kendeord (split(/,/,$ord{$_})) {
      if ($FORM{$key} =~ /$kendeord/i){
        print MAIL "$key = $FORM{$key}\n\n";
        }
      }
  }

Avatar billede y2k Nybegynder
08. juli 2000 - 18:17 #8
Til kirkeby,

gerne, hvis du fortæller lidt mere om, hvad programmet ska gøre.. :-)
Avatar billede perh Juniormester
09. juli 2000 - 01:18 #9
y2k:
Det er en flot løsning, jeg har testet den igennem.
Det eneste der står tilbage er at få programmet til kun at sende email til de modtagere der er meddelelser til i formularen.
I øjeblikket sender det email til alle, uanset om der er indhold eller ej?

Mht kirkebys spgml: Jeg prøver også at få sendt en email med alle felter til formularens afsenders email-adresse.

Jeg har prøvet lidt med at sætte
$FORM{'email'}
ind i maillisten, f. eks sådan:
$kvitt = $FORM{'email'};
$mail{'kvitt'}= $kvitt;    $ord{'kvitt'}= ' ';
efter at have flyttet STDIN-parsningen op over maillisten, men det duer ikke?
Avatar billede y2k Nybegynder
09. juli 2000 - 01:27 #10
gør det at du sletter
foreach $key (keys(%FORM)) {
  foreach $kendeord (split(/,/,$ord{$_})) {
      if ($FORM{$key} =~ /$kendeord/i){
        print MAIL "$key = $FORM{$key}\n\n";
        }
      }
  }

lige efter foreach ('hasle','fredb') {

indsætter du så følgende:
@mail = ();
foreach $key (keys(%FORM)) {
  foreach $kendeord (split(/,/,$ord{$_})) {
      if ($FORM{$key} =~ /$kendeord/i){
        push (@mail, "$key = $FORM{$key}\n\n");
        }
      }
  }

linien "if (defined($FROM{'navn'})) {" skal så rettes til:

if (defined($FROM{'navn'}) && (@mail)) {


og inden close MAIL kommandoen indsætter du så:

print MAIL join('',@mail);
Avatar billede y2k Nybegynder
09. juli 2000 - 01:28 #11
ups, der skulle selvfølgelig stå print MAIL join('', @mail);
Avatar billede perh Juniormester
09. juli 2000 - 12:10 #12
Bedre print MAIL join('', @mail);

Ja, nu virker det helt perfekt.
Tusind tak.
Hvordan giver jeg dig de ekstra point.
Skal jeg bare oprette et tomt spørgsmål ang dette med dine points?
Avatar billede perh Juniormester
09. juli 2000 - 12:33 #13
Mystisk,
det er åbenbart ikke muligt at skrive to enkelte apostrofer efter hinanden, da den ene bliver spist af systemet.

Vi prøver at skrive to enkelte apostrofer i join-parantesen.

Ærgerlig systemfejl når man skriver koder.

Avatar billede y2k Nybegynder
09. juli 2000 - 18:25 #14
hæh*GG*
Avatar billede y2k Nybegynder
09. juli 2000 - 18:26 #15
angående pointsne, så kan du bare oprette et nyt spørgsmål, det er helt ok ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Senior specialister (Datacenter Network) til Forsvarets nye Digitale Backbone

Forsvarets Efterretningstjeneste

Network engineer - Routing & Switching

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer