Avatar billede ztyxx Nybegynder
03. februar 2002 - 01:51 Der er 33 kommentarer og
2 løsninger

hvorfor kommer disse oplysninger i email body i stedet for sender, modtager osv

jeg sidder og roder lidt med et postkortscript i perl, som egentlig virker fint nok, dog når man modtager mailen om postkortet, kommer diverse oplysninger som afsender, email, emne med mere i mailens body, istedet for hvor de skal, og da jeg ikke kender til perl, går jeg ud fra at der sidder en ekspert den kan fortælle mig lidt om det....
her er scriptet:
#!/usr/local/bin/perl
#######################################################
#postcard.pl 1.4                   
#                                           
#by Command-O Software                       
#http://www.command-o.com   
#               
#Programmer: Kendall Comey                                   
#                                       
#For support, write: support@command-o.com
#Copyright, 1997, All Rights Reserved               
#
#By using this script Licensee agrees to all terms of the License
#Agreement.                               
#
#If you find this script useful, we would appreciate a
#donation to keep this service active for the community.
#Command-O Software, P.O. Box 12200, Jackson WY 83002
#######################################################
# Client Customization Variables

#Set the correct paths, if cgi-lib.pl and postcard.setup are not in cgi-bin.
require 'cgi-lib.pl';
require 'postcard.setup';

############################################################
# CHANGING ANYTHING BELOW THIS LINE WITHOUT THE EXPRESS PERMISSION   
#  OF COMMAND-O SOFTWARE IS A VIOLATION OF THE LICENSE AGREEMENT   
############################################################

#Turn off Perl buffering
$| = 1;

#Read and parse the form data
&ReadParse(*input);

#Assign variables

$date = `$date_command +"%m\/%d\/%Y"`;
$date =~ s/\n*$//;
$current_date = $date;
$test = 0;
$time = time;
$cardlist_temp = "$cardlist" . "_" . "temp";

if ($input{'send'} ne "") {
print "Location: $url_of_postcard_html", "\n\n";
}
elsif ($input{'pickup'} ne "") {
print "Location: $url_of_pickup_html", "\n\n";
}
elsif ($input{'preview'} ne "") {
    print &PrintHeader;
    &check_required;
    &select_card_number;
    &print_preview;
}
elsif ($input{'submit'} ne "")    {
    print &PrintHeader;
    &send_card;
    &delete_old_cards;

}
elsif ($ENV{'QUERY_STRING'} ne "")    {
    print &PrintHeader;
    &pickup_card;
}

#########################################################################
sub delete_old_cards    {
$current_time = time;

$delete_date = $current_time - ($days * 86400);

open (TEMP, ">$cardlist_temp") || die ("Could not open $cardlist_temp");
flock (TEMP, 2);
open (CARD, "$cardlist") || die ("Could not open $cardlist");
flock (CARD, 2);
    while (<CARD>)    {
    ($number, $from, $from_email, $message, $to, $notify, $image, $date_time, $date) = split(/\|/, $_);
        if ($delete_date < $date_time)    {
        print TEMP "$_";
        }
    }
flock (CARD, 8);
flock (TEMP, 8);
close (TEMP);
close (CARD);
rename ($cardlist_temp, $cardlist);
}

############################################################
sub check_required    {
if ($input{'address'} eq "")    {
print "You must specify the email address of the recipient in order for this ";
print "postcard to be sent. Please use the back button on your browser to ";
print "enter the email address and then submit the postcard again. Thank you.";
exit;
}
unless ($input{'address'} =~ /^[\w-.]+\@[\w-.]+$/)    {
print "Invalid email address. Please use the back button on your browser to ";
print "enter the correct email address and then submit the postcard again. ";
print "Thank you.";
exit;
}
if ($input{'name'} eq "")    {
print "You must specify a name for the recipient of this postcard in order for this ";
print "postcard to be sent. Please use the back button on your browser to ";
print "enter the name of the recipient and then submit the postcard again. Thank
you.";
exit;
}
if ($input{'sender'} eq "") {
print "You must specify a name for the sender of this postcard in order for this ";
print "postcard to be sent. Please use the back button on your browser to ";
print "enter the name of the sender and then submit the postcard again. Thank you.";
exit;
}
if ($input{'notify'} ne "" && $input{'senderemail'} eq "")    {
print "You must enter your email address in order to be notified when your postcard ";
print "is picked up. Please use the back button on your browser to ";
print "enter your email address or deselect the notification checkbox and then ";
print "submit  the postcard again. Thank you.";
exit;
}
if ($input{'senderemail'} ne "")    {
unless ($input{'senderemail'} =~  /^[\w-.]+\@[\w-.]+$/) {
print "Invalid email address. Please use the back button on your browser to ";
print "enter the correct email address and then submit the postcard again. ";
print "Thank you.";
exit;
}
}
}

############################################################
#Preview postcard
sub print_preview    {
open (PAGE, "$preview_postcard") || die ("I am sorry, but I was unable to open the
file $preview_postcard.");
    while (<PAGE>)        {
    s/%%date%%/$date/g;
    s/%%name%%/$input{'name'}/g;
    s/%%sender%%/$input{'sender'}/g;
    s/%%message%%/$input{'message'}/g;
    s/%%address%%/$input{'address'}/g;
    s/%%senderemail%%/$input{'senderemail'}/g;
    s/%%notify%%/$input{'notify'}/g;
    s/%%image%%/$image/g;
    print $_;
    }
    close (PAGE);
}

############################################################
#Put in the correct photograph
sub select_card_number {
$image = $input{'card_number'};
}

############################################################
sub send_card    {
#Assign a userid
srand (time|$$);
$userid = int (rand(1000));
$userid .= "$$";

#Print out thank you message
open (PAGE, "$thank_you") || die ("I am sorry, but I was unable to open the file
$thank_you.");
while (<PAGE>)        {
    s/%%name%%/$input{'name'}/g;
    print $_;
}
close (PAGE);

#Write form data to file
open (DATABASE, ">>$cardlist") || die ("I am sorry, but I was unable to open the file.");

#Remove any pipe symbols from input
$input{'sender'} =~ s/\|//g;
$input{'message'} =~ s/\|//g;
$input{'name'} =~ s/\|//g;
$input{'senderemail'} =~ s/\|//g;
$input{'message'} =~ s/\s+/ /g;

flock (DATABASE, 2);

print DATABASE "$userid\|$input{'sender'}\|$input{'senderemail'}\|$input{'message'}\|";
print DATABASE "$input{'name'}\|$input{'notify'}\|$input{'card_number'}\|$time\|$date\n";

flock (DATABASE, 8);
close (DATABASE);

#Send e-mail to recipient
open (MAIL, "|$mailprog $input{'address'}") || die "Can't open $mailprog!\n";
    print MAIL "Reply-to: $input{'senderemail'}\n";
    print MAIL "From: $input{'senderemail'}\n";
    print MAIL "To: $input{'address'}\n";
    print MAIL "Subject: $subject\n\n";
open (PAGE, "$mail_message") || die ("I am sorry, but I was unable to open the file
$thank_you.");
    while (<PAGE>)        {
    s/%%sender%%/$input{'sender'}/g;
    s/%%userid%%/$userid/g;
    print MAIL $_;
    }
close (PAGE);
close (MAIL);
}

############################################################
sub pickup_card {
#Open card.list file
open (DATABASE, "$cardlist") || &CgiDie ("I am sorry, but I was not able to open the
data file.");
flock (DATABASE, 2);
#Assign database to list array
    @list = <DATABASE>;
flock (DATABASE, 8);
close (DATABASE);

#Split array into scalar variables
foreach $list (@list) {
($userid, $sender, $senderemail, $message, $name, $notify, $image, $date_time, $date) = split
(/\|/, $list);

#Compare form input to $userid
if ($input{'id_num'} eq $userid && $input{'id_num'} ne "") {
$test = 1;
&print_html;
if ($notify eq "on") {
&notify;
}
last;
}
}

if ($test == 0) {
&invalid_id;
}
}
############################################################
sub print_html {
open (PAGE, "$show_postcard") || die ("I am sorry, but I was unable to open the file
$thank_you.");
    while (<PAGE>)        {
    s/%%sender%%/$sender/g;
    s/%%date%%/$date/g;
    s/%%name%%/$name/g;
    s/%%message%%/$message/g;
    s/%%image%%/$image/g;
    print  $_;
            }
close (PAGE);
}

############################################################
#Send e-mail to sender
sub notify {
$date =~ s/\n*$//;
open (MAIL, "|$mailprog $senderemail") || die "Can't open $mailprog!\n";
print MAIL "Reply-to: $reply_to\n";
print MAIL "From: $reply_to\n";
  print MAIL "To: $senderemail\n";
  print MAIL "Subject: Postcard Picked-up\n\n";
  print MAIL "The postcard you sent to $name, from $company, was picked up on ";
print MAIL "$date. \nThank you.";
close (MAIL);
}

############################################################
#Invalid user message
sub invalid_id {
print <<EOT;
Sorry, but you have entered an invalid card ID number. Please use the back button
on your browser to re-enter the correct card ID.
EOT
exit;
}

og her er den del jeg tror der driller:
#Send e-mail to recipient
open (MAIL, "|$mailprog $input{'address'}") || die "Can't open $mailprog!\n";
    print MAIL "Reply-to: $input{'senderemail'}\n";
    print MAIL "From: $input{'senderemail'}\n";
    print MAIL "To: $input{'address'}\n";
    print MAIL "Subject: $subject\n\n";
open (PAGE, "$mail_message") || die ("I am sorry, but I was unable to open the file
$thank_you.");
    while (<PAGE>)        {
    s/%%sender%%/$input{'sender'}/g;
    s/%%userid%%/$userid/g;
    print MAIL $_;
    }
close (PAGE);
close (MAIL);
}
Avatar billede erikjacobsen Ekspert
03. februar 2002 - 01:55 #1
Din sendmail kræver muligvis parametren -t for at læse
de data i din "krop":

open (MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n";
Avatar billede ztyxx Nybegynder
03. februar 2002 - 02:01 #2
hmm, det vil den ikke, der kommer så ingen mail.....
Avatar billede ztyxx Nybegynder
03. februar 2002 - 02:04 #3
for lige at være sikker, skal linien
open (MAIL, "|$mailprog $input{'address'}") || die "Can't open $mailprog!\n";
så se sådan ud?
open (MAIL, "|$mailprog -t $input{'address'}") || die "Can't open $mailprog!\n";
Avatar billede erikjacobsen Ekspert
03. februar 2002 - 02:11 #4
Nej, egentlig uden emailadresse dér. Den står jo i din "body"
før de 2 linieskift. Har du prøvet præcis som jeg skrev.
(Jeg er bestemt ikke sikker, men har selv lige haft bøvlet med
forskellige sendmails)
Avatar billede ztyxx Nybegynder
03. februar 2002 - 02:23 #5
har nu prøvet at paste dit forslag ind, men uden held :-(
Avatar billede erikjacobsen Ekspert
03. februar 2002 - 02:31 #6
Hmm, jeg kan heller ikke forstå hvorfor. Jeg har To: adressen
stående øverst. (Og på en anden sendmail været nødt til
at tilføje -t som anført ovenfor):

open(F,"|/usr/bin/sendmail");
print F "To: $emailaddress\n";
if ($ccaddress ne "") {
  print F "Cc: $ccaddress\n";
}
print F "Subject: Your ..................\n";
print F "Content-type: text/html\n";
print F "\n";
print F "<html><head><title>.......................</body></html>\n";
close(F);
Avatar billede ztyxx Nybegynder
03. februar 2002 - 02:34 #7
mon det ville hjælpe at bytte rundt på To: og Reply-to: ???
Avatar billede ztyxx Nybegynder
03. februar 2002 - 02:35 #8
mener From: og Reply-to:
Avatar billede erikjacobsen Ekspert
03. februar 2002 - 02:42 #9
Hvad ved jeg .... ? Prøv - mit eksempel har i hvert fald kørt som
det står her.
Avatar billede erikjacobsen Ekspert
03. februar 2002 - 02:45 #10
Man plejer også at skrive
Reply-To: ...
altså med stort T - jeg ved om din sendmail er kritisk overfor det.
Avatar billede erikjacobsen Ekspert
03. februar 2002 - 02:46 #11
suk .... jeg ved IKKE om ....
Avatar billede ztyxx Nybegynder
03. februar 2002 - 02:46 #12
virkede heller ikke...

ved ikke lige hvordan jeg skal stoppe det ind i scriptet??
Avatar billede erikjacobsen Ekspert
03. februar 2002 - 02:49 #13
Proppe hvad ind? Altså: prøv med To: som øverste linie,
og prøv med Reply-To:
Avatar billede ztyxx Nybegynder
03. februar 2002 - 02:50 #14
øh, hvad betyder dette med at fjerne pibes her:
#Remove any pipe symbols from input
$input{'sender'} =~ s/\|//g;
$input{'message'} =~ s/\|//g;
$input{'name'} =~ s/\|//g;
$input{'senderemail'} =~ s/\|//g;
$input{'message'} =~ s/\s+/ /g;
Avatar billede ztyxx Nybegynder
03. februar 2002 - 02:51 #15
proppe dit eksempel ind i scriptet
Avatar billede erikjacobsen Ekspert
03. februar 2002 - 02:54 #16
Du skal ikke proppe mit eksempel ind, men bruge det
som inspiration.

Det med at fjerne |-ere fra input data er formelt set ligegyldigt,
men er en ekstra form for sikkerhed mod at hackere kan
"komme til" at udføre kommandoer på serveren.
Avatar billede ztyxx Nybegynder
03. februar 2002 - 02:56 #17
oki
Avatar billede ztyxx Nybegynder
03. februar 2002 - 03:24 #18
fandt løsningen, den server som ham jeg hjælper har det liggende på, har tilsyneladende to mailprogrammer, det ene hedder /bin/mail og det andet hedder /usr/bin/sendmail som normalt, og det sidste virker, men sjovt nok uden -t, men hvad, hovedsagen er at det dur, og hvis du smider et svar, får point for dine forslag og tålmodighed:-)
Avatar billede erikjacobsen Ekspert
03. februar 2002 - 03:27 #19
Ok - da - men ikke mere end 10 p ...
Avatar billede ztyxx Nybegynder
03. februar 2002 - 03:30 #20
snupper selv resten, men tak for hjælpen
Avatar billede ztyxx Nybegynder
03. februar 2002 - 03:38 #21
lige en ting mere, hvis jeg nu vil have From:  til at vise både navnet og email, enten som navn<email@xxx.dk> eller bare som et navn, hvor emailen gemmer sig bag, skal det så se sådan ud
print MAIL "From: $input{'senderemail','sender'}\n";
Avatar billede ztyxx Nybegynder
03. februar 2002 - 07:43 #22
damn, nu har jeg fået gjort et eller andet så det ikke virker, tog eller en kopi af det mens det virkede og lagde på min maskine, før jeg begyndte at lege, men nu vil den heller ikke virke med kopien ?????
Avatar billede erikjacobsen Ekspert
03. februar 2002 - 08:10 #23
He he.... på'n igen....
Jeg mener den skal se sådan ud (eksempel)

From: "Julemanden i Grønland" <julemanden@langtnordpaa.gl>
Avatar billede ztyxx Nybegynder
03. februar 2002 - 08:14 #24
hmm, får bare en error 500 uanset hvad pokker jeg gør, og det er helt 100 at den jeg lagde på min egen maskine før jeg begyndte at lege virkede....
Avatar billede ztyxx Nybegynder
03. februar 2002 - 08:15 #25
hmm, det er sq noget nemmere med PHP :-)
Avatar billede erikjacobsen Ekspert
03. februar 2002 - 08:22 #26
Du har fået lavet dig en syntaks fejl. Jeg plejer at et få en
prompt med telnet til serveren, smutte ned i det relevante
katalog, og så sige: perl scriptetsnavn.pl

Så vælter det ud med irriterende syntaksfejl.
Avatar billede ztyxx Nybegynder
03. februar 2002 - 08:33 #27
fandt fejlen, havde fået sat et dumt lille e i en relativ sti, fik den fjernet, så nu spiller det næsten igen, kan dog ikke få emnet i emnefeltet
Avatar billede erikjacobsen Ekspert
03. februar 2002 - 08:36 #28
hvis det er linien
print MAIL "Subject: $subject\n\n";
kan jeg heller ikke se du kommer noget i $subject
Avatar billede ztyxx Nybegynder
03. februar 2002 - 08:39 #29
det er den linie, der ligger en fil på serveren der hedder postcard.setup hvor der er et emne i, som pl scriptet kalder, og så skulle det emne komme med, det gjorde det før, i hvert tilfælde
Avatar billede ztyxx Nybegynder
03. februar 2002 - 08:51 #30
hehe, jeg er vist for træt, der var lige kommet et mellemrum ind imellem
$ og subject, FÅÅÅRK hvor kan sådan nogle småting være svære at se *LOL*
Avatar billede erikjacobsen Ekspert
03. februar 2002 - 08:51 #31
Hvor der står
print MAIL "Subject: Postcard Picked-up\n\n";
?? Er du sikker ?
Avatar billede ztyxx Nybegynder
03. februar 2002 - 08:56 #32
print MAIL "Subject: $subject\n\n";
er den der skal med når man får mailen om at man har fået kortet, og den kommer med nu, det er den der står i setup filen
Avatar billede ztyxx Nybegynder
03. februar 2002 - 09:05 #33
så virker det, også navn/email, det var sq rart, og nu piller jeg absolut ikke mere ved det *LOL*
Avatar billede erikjacobsen Ekspert
03. februar 2002 - 09:06 #34
Lav den hellere skrivebeskyttet ...
Avatar billede ztyxx Nybegynder
03. februar 2002 - 09:18 #35
hehe, det må være op til ham der har siden;-)
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