Avatar billede roadrunr Nybegynder
07. april 2001 - 13:18 Der er 6 kommentarer og
1 løsning

Installation af Perl + Formmail.pl

Jeg vil gerne vide hvordan jeg kommer frem til at kunne have Perl til at køre på min webserver. Dernæst hvordan jeg får noget formmail til at fungere.
-------------------------
Webserver = win2000 IIS 5.0
-------------------------

1. Jeg har været inde på : http://www.activestate.com
Hvor jeg har downloadet installationsfilerne til perl. Dem har jeg så installeret.

2. Dernæst har jeg downloadet formmail.pl, som jeg har placeret i en mappe på webserveren, og tildelt den passende rettigheder.

3. Har lavet en formular som sender til formmail.pl. I første omgang kunne jeg ikke bruge \"formmail.pl\" da jeg først skulle tilføje \"localhost\" under @referers. Det gjorde jeg ved at ændre i filen.(findes der ikke en dos-command, som kan gøre det samme?)

4. Nu er jeg kommet dertil at jeg sagtens kan sende til formmail.pl - men jeg modtager bare ikke nogen mail.

Jeg har læst mig lidt til at jeg skal installere en mail-sender el.lign. Men hvordan gør jeg det?

Hvad mangler jeg for at få det hele til at virke. Skal jeg bruge en speciel mailserver til at sende igennem, eller bruger jeg automatisk webserverens egen smtp?

Det skal siges at jeg er 100% ny i perl, og skal derfor gerne have det hele forklaret i små detaljer.

På forhånd tak

/Martin
Avatar billede thomasledet Nybegynder
07. april 2001 - 13:57 #1
Problemet er nok, at din formmail.pl er skrevet til en unix-maskine... den prøver med garanti at sende mailien vha sendmail, som er et program, de fleste unix-baserede servere har installeret. Men det har windows ikke.

Det, der skal til, er at du ændrer i formmail.pl-filen og sletter alle referencer til sendmail... og insætter følgende i stedet:

use Socket;

sub sendmail {

my ($from, $reply, $to, $smtp, $subject, $message) = @_;

my ($fromaddr) = $from;
my ($replyaddr) = $reply;

$to =~ s/[ \\t]+/, /g;
$fromaddr =~ s/.*<([^\\s]*?)>/$1/;
$replyaddr =~ s/.*<([^\\s]*?)>/$1/;
$replyaddr =~ s/^([^\\s]+).*/$1/;
$message =~ s/^\\./\\.\\./gm;
$message =~ s/\\r\\n/\\n/g;
$message =~ s/\\n/\\r\\n/g;
$subject =~ s/^\\./\\.\\./gm;
$subject =~ s/\\r\\n/\\n/g;
$subject =~ s/\\n/\\r\\n/g;
$smtp =~ s/^\\s+//g;
$smtp =~ s/\\s+$//g;


if (!$to) { return -8; }

my($proto) = (getprotobyname(\'tcp\'))[2];
my($port) = (getservbyname(\'smtp\', \'tcp\'))[2];

my($smtpaddr) = ($smtp =~
/^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/)
? pack(\'C4\',$1,$2,$3,$4)
: (gethostbyname($smtp))[4];

if (!defined($smtpaddr)) { return -1; }

if (!socket(S, AF_INET, SOCK_STREAM, $proto)) {
  return -2; }
if (!connect(S, pack(\'Sna4x8\', AF_INET, $port, $smtpaddr))) {
  return -3; }

my($oldfh) = select(S); $| = 1; select($oldfh);

$_ = <S>; if (/^[45]/) { close S; return -4; }

print S \"helo localhost\\r\\n\";
$_ = <S>; if (/^[45]/) { close S; return -5; }

print S \"mail from: <$fromaddr>\\r\\n\";
$_ = <S>; if (/^[45]/) { close S; return -5; }

foreach (split(/, /, $to)) {
  print S \"rcpt to: <$_>\\r\\n\";
  $_ = <S>; if (/^[45]/) { close S; return -6; }
  }

print S \"data\\r\\n\";
$_ = <S>; if (/^[45]/) { close S; return -5; }

print S \"To: $to\\r\\n\";
print S \"From: \\\"$fromname\\\" \\<$from\\>\\r\\n\";
print S \"Reply-to: $replyaddr\\r\\n\" if $replyaddr;
print S \"Subject: $subject\\r\\n\";
print S \"Date: $time\\r\\n\";
print S \"Content-Type: text/plain; charset=\\\"us-ascii\\\"\\r\\n\\r\\n\";
print S \"$message\";
print S \"\\r\\n.\\r\\n\";

$_ = <S>; if (/^[45]/) { close S; return -7; }

print S \"quit\\r\\n\";
$_ = <S>;

close S;
return 1;
}

proceduren kaldes på følgende måde:

sendmail(\'email adresse, der sendes til\',\'svar adresse\',\'fra adresse\',\'din smtp server... brug din internetudbyders, fx mail.teledanmark.dk\',\'emailens subject\',\'selve mailen\');

held og lykke!
Avatar billede thomasledet Nybegynder
07. april 2001 - 14:06 #2
du vil sikkert også lige køre den her:

sub gettime
{
my @days = (\'Sun\',\'Mon\',\'Tues\',\'Wed\',\'Thu\',\'Fri\',\'Sat\');
my  @months = (\'Jan\',\'Feb\',\'Mar\',\'Apr\',\'May\',\'Jun\',\'Jul\',\'Aug\',\'Sep\',\'Oct\',\'Nov\',\'Dec\');

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

  if ($hour < 10) { $hour = \"0$hour\"; }
  if ($min < 10) { $min = \"0$min\"; }
  if ($sec < 10) { $sec = \"0$sec\"; }

  $time = \"$days[$wday], $mday $months[$mon] $year $hour\\:$min\\:$sec \\+0100\";
}

så ser datoen rigtig ud for dem, der modtager din mail...
Avatar billede roadrunr Nybegynder
07. april 2001 - 14:19 #3
Okay... det forstod jeg ikke så meget af. Dog har jeg læst lidt om at der var en forskel på unix/nt måden at sende på. Hvor unix brugte \"sendmail\" og nt brugte \"blat.exe\" el.lign. og at man så i formmail.pl kunne ændre denne egenskab. Men hvad dette er tilfældet - så mangler jeg blat.exe.
Hvor finder jeg det henne og hvordan skal det installeres?
Avatar billede thomasledet Nybegynder
07. april 2001 - 15:22 #4
hvis du indsætter koden, jeg har skrevet her, har du ikke brug for blat...
Avatar billede webgeniet Nybegynder
23. april 2001 - 17:36 #5
Prøv med:

$ip = \"255.255.255.255\" # skriv ip\'en på serveren.

use Net::SMTP;

    $smtp = Net::SMTP->new($ip);

    $smtp->mail($fraemail);
    $smtp->to($tilemail);

    $smtp->data();
    $smtp->datasend(\"To: $tilemail\\n\");
    $smtp->datasend(\"From: $fraemail ($franavn)\\n\");
    $smtp->datasend(\"Subject: $emne\\n\");
    $smtp->datasend(\"\\n\");
    $smtp->datasend(\"Besked: hejsa\\n\");

    $smtp->dataend();
    $smtp->quit;
Avatar billede thomasledet Nybegynder
23. april 2001 - 20:02 #6
det kan man selvfølgelig også... det kræver an man som minimun har Net::SMTP modulet installeret... men det følger vist med som standard på de fleste perl-distributioner...
Avatar billede roadrunr Nybegynder
11. september 2001 - 00:17 #7
Lukker spørgsmålet, da jeg ikke fandt den hjælp jeg søgte.
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