Avatar billede Angelo Praktikant
18. maj 2005 - 18:32 Der er 23 kommentarer og
1 løsning

Jeg har en PHP mailform, der ikke virker på vores linux server

Jeg har flyttet mit domæne(www.hoffmannart.dk) til vores egen server gennem gratisDNS.dk/MXhotel.dk. men min mailform virker ikke på den nye server. kun hvis man bruger mailserverens egen mail(@ab-kilholm.dk i PHP scriptet. kan serveren være sat forkert op?
Avatar billede oonofearoo Nybegynder
18. maj 2005 - 20:49 #1
kender ikke noget til MXhotel.dk men prøv at smide din kode ind her, så er der større chance for der er en der kan hjælpe.
Avatar billede Angelo Praktikant
18. maj 2005 - 21:24 #2
<?php
    if(isset($_POST['sub'])) {
        $ok = 1;
        if(empty($_POST['navn'])) {
            echo "Du skal skrive dit navn<br />";
            $ok = 0;
        }

        if(empty($_POST['mail'])) {
            echo "Du skal skrive din mail<br />";
            $ok = 0;
        }

        if(empty($_POST['besked'])) {
            echo "Du skal skrive en besked";
                $ok = 0;
        }

        if($ok == 1) {
            $to = "kim@hoffmannart.dk";

            $navn = $_POST['navn'];
            $mail = $_POST['mail'];
            $hp = $_POST['hp'];
            $besked = $_POST['besked'];

            $headers = "From: " . $to . "\nReply-to: " . $mail;

            $msg = "Navn: " . $navn . "\n";
            $msg .= "Mail: " . $mail . "\n";
            $msg .= "Hjemmeside: " . $hp . "\n";
            $msg .= "Besked:\n";
            $msg .= $besked;

            $subject = "Mailform på Hoffmannart.dk";

            if(mail($to, $subject, $msg, $headers)) {
                echo "Tak for din kommentar.";
                exit;
            }

            else {
                echo "En fejl opstod, og mailen blev ikke sendt.";
                exit;
            }
        }
    }
?>
Avatar billede smirnoff Nybegynder
18. maj 2005 - 21:38 #3
du siger din egen server - er den en linux server? - normalt er "mail" kommandoen i php wrapper til en underliggende sendmail... scriptet ser udmiddelbart rigtig nok ud
Avatar billede smirnoff Nybegynder
18. maj 2005 - 21:40 #4
..og hvis jeg ellers kunne læse - ja det er en linux server :) ... men kan du sende mail ved brug af 'mail' hvis du logger ind via konsollen
Avatar billede Angelo Praktikant
18. maj 2005 - 21:45 #5
Det er vores boligforenings server, så jeg har ikke adgang til den.
Avatar billede smirnoff Nybegynder
18. maj 2005 - 22:00 #6
tilsyneladende sender den til sit eget domæne uden probs - prøv at spørg sysadm om den ikke ka sættes op til at sende ud til omverdenen.
Avatar billede nielle Nybegynder
18. maj 2005 - 22:04 #7
Det lyder nu snare som om at mailsereveren er sat korrekt op. Hvis du kunne bruge en mail server til at sende mails, som ser ud til at komme fra en vilkårlig anden afsender, så kunne du jo bruge dette til at afsende det ondeste spam.

Ikke desto mindre er der mange mailservere derude som netop tillader dette. Det skyldes som regel at serveren er sat op af en amatør og at mail-server softwaren leveres med nogle tåbelige standard-konfigurationer. Men dette er altså heldigvis ikke tilfældet for jeres.

En mulig løsning på dit problem kunne muligvis være at indsætte mailserverens egen adresse som From og sætte din egen mailadresse som Reply-to.
Avatar billede Angelo Praktikant
18. maj 2005 - 22:09 #8
Nielle. jeg kan stort set ikke noget php, Kan du evt. ikke sætte det ind? Der er noget med at port 25 er lukket, og at man skal bruge smtp "mail"
Avatar billede Angelo Praktikant
18. maj 2005 - 22:15 #9
eller 10.10.0.1 i ip til smtp
Avatar billede nielle Nybegynder
18. maj 2005 - 22:16 #10
Tja, det er jo lidt som at skyde i blinde når jeg ikke har mere at gå efter, men prøv dette:

<?php
if(isset($_POST['sub'])) {
    $ok = 1;
    if(empty($_POST['navn'])) {
        echo "Du skal skrive dit navn<br />";
        $ok = 0;
    }

    if(empty($_POST['mail'])) {
        echo "Du skal skrive din mail<br />";
        $ok = 0;
    }

    if(empty($_POST['besked'])) {
        echo "Du skal skrive en besked";
        $ok = 0;
    }

    if($ok == 1) {
        $from = "webmaster@ab-kilholm.dk";
        $to = "kim@hoffmannart.dk";

        $navn = $_POST['navn'];
        $mail = $_POST['mail'];
        $hp = $_POST['hp'];
        $besked = $_POST['besked'];

        $headers = "To: " . $to . "\nFrom: " . $from . "\nReply-to: " . $mail;

        $msg = "Navn: " . $navn . "\n";
        $msg .= "Mail: " . $mail . "\n";
        $msg .= "Hjemmeside: " . $hp . "\n";
        $msg .= "Besked:\n";
        $msg .= $besked;

        $subject = "Mailform på Hoffmannart.dk";

        if(mail($to, $subject, $msg, $headers)) {
            echo "Tak for din kommentar.";
            exit;
        }
        else
        {
            echo "En fejl opstod, og mailen blev ikke sendt.";
            exit;
        }
    }
}
?>
Avatar billede Angelo Praktikant
18. maj 2005 - 22:24 #11
Det virker desværre ikke:(
Avatar billede Angelo Praktikant
18. maj 2005 - 22:31 #12
Af sikkerhedshensyn er der blokeret for udgående mail-trafik (SMTP) over port 25. Det betyder at alt udgående post skal sendes gennem BoligNET-serveren ved at anvende SMTP-serveren "mail" - også selvom du anvender en mailadresse udenfor foreningen.
Avatar billede nielle Nybegynder
18. maj 2005 - 22:36 #13
Hvis jeg afprøver din formular får jeg beskeden "Tak for din kommentar". Mail systemet mener øjensynligt ikke selv at der er noget problem. Kommer mails bare ikke frem eller hvad?
Avatar billede nielle Nybegynder
18. maj 2005 - 22:45 #14
Det lyder jo som en logisk forklaring på hvorfor der ikke sker noget. Du bliver vist nodt til at konsultere med jeres system ansvarlige.
Avatar billede sukos Juniormester
18. maj 2005 - 23:01 #15
I dit tidligere oprettede spm. http://www.eksperten.dk/spm/618686 skriver du noget om at SMTP skal sættes til 10.0.0.1
Hvis ikke det er gjort i php.ini, kan du prøve med:

<?php
ini_set('SMTP', "10.0.0.1");
.....resten af script
Avatar billede smirnoff Nybegynder
18. maj 2005 - 23:06 #16
Jeg er stensikker på det ikke er et problem med port 25 på serveren, da php's mail direkte piper mail til den mail-server som nu engang er installeret (typisk sendmail, postfix eller qmail), derfor kommer der ingen fejl. Mao mailserveren på linuxmaskinen kan/vil ikke aflevere mailen udadtil ..

Desværre kan man ikke angive en smtp-server i php's mail kommando - det er kun på en windowsserver (derfor tror jeg heller ikke ini_set('SMTP', '...') vil have nogen effekt) - det er sysadm som skal konfigge den mailserver som kører på linuxmaskinen
Avatar billede smirnoff Nybegynder
18. maj 2005 - 23:22 #17
faktisk har jenslyn_s i dette spørgsmål : http://www.eksperten.dk/spm/618769 - lavet en glimrende smtp_client class som du kan bruge til at omgås problemet .. der kan du nemlig selv angive hvilken smtphost du ønsker at kalde - og du kan bruge den du får henvist af din sysadm.
Avatar billede Angelo Praktikant
19. maj 2005 - 04:46 #18
Smirnoff. Hvilke oplysninger skal jeg have af Sysadmin, kan du hjælpe med at lave scriptet?. Jeg er total begynder i php.
Avatar billede smirnoff Nybegynder
19. maj 2005 - 21:31 #19
jeg kan da prøve - det du skal vide er hvilken smtp-server du skal bruge .. du skriver man skal bruge smtp-serveren "mail" ... vi er dog nødt til at vide, om "mail" refererer til ip-adressen: 10.10.0.1 - eller vi blot kan bruge denne ip-adresse direkte .. eller  skal forbinde til en ekstern smtp-server (f.eks smtp.ditogdat.dk)
Avatar billede Angelo Praktikant
19. maj 2005 - 22:42 #20
Det skal direkt tro jeg til 10.10.0.1... min sysadmin skriver:

Hej Kim,

Det eneste du skal vide er at SMTP-serveren hedder 10.10.0.1 (prøv evt. 127.0.0.1) og kører på port 25. Det er kun udgående SMTP gennem serveren der er lukket.

Det er som bekendt en Linux-server - måske er det årsagen til at nogle funktioner ikke fungerer...?
Avatar billede smirnoff Nybegynder
20. maj 2005 - 17:15 #21
Prøv at sætte denne stump kode ind i en php-fil - bemærk at jenslyns kode logger til en fil han kalder 'smtp_client.log' - hvis ikke du vil det kan du fjerne alle kald til $this->elog(...); ... jeg har ikke forsøgt at køre denne kode, men jeg har lagt din egen kode ind i scriptet og ændret en smule nederst... lad høre hvad du finder ud af:

<?php

class smtp_client {
    var $connection;
    var $server;
    var $elog_fp;
    var $log_file='smtp_client.log';
    var $do_log=true;


    // default constructor
    function smtp_client($server='smtp1.b-one.net') { //din udbyders smtp server
        if (!$server) $this->server="localhost";
        else $this->server=$server;
   
        $this->connection = fsockopen($this->server, 25);
        if ($this->connection <= 0) return 0;

        $this->elog(fgets($this->connection, 1024));
        $this->elog("HELO xyz\r\n", 1);
        fputs($this->connection,"HELO xyz\r\n");
        $this->elog(fgets($this->connection, 1024));
        }

    function email($from_mail, $to_mail, $to_name, $header, $subject, $body) {
        if ($this->connection <= 0) return 0;

        $this->elog("MAIL FROM:$from_mail", 1);
        fputs($this->connection,"MAIL FROM:$from_mail\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("RCPT TO:$to_mail", 1);
        fputs($this->connection, "RCPT TO:$to_mail\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("DATA", 1);
        fputs($this->connection, "DATA\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("Subject: $subject", 1);
        $this->elog("To: $to_name", 1);
        fputs($this->connection,"Subject: $subject\r\n");
        fputs($this->connection,"To: $to_name\r\n");

        if ($header) {
            $this->elog($header, 1);
            fputs($this->connection, "$header\r\n");
            }

        $this->elog("", 1);
        $this->elog($body, 1);
        $this->elog(".", 1);
        fputs($this->connection,"\r\n");
        fputs($this->connection,"$body \r\n");
        fputs($this->connection,".\r\n");
        $this->elog(fgets($this->connection, 1024));

        return 1;
        }


    function send() {
        if ($this->connection) {
            fputs($this->connection, "QUIT\r\n");
            fclose($this->connection);
            $this->connection=0;
            }
        }

    function close() { $this->send(); }


    function elog($text, $mode=0) {
        if (!$this->do_log) return;

        // open file
        if (!$this->elog_fp) {
            if (!($this->elog_fp=fopen($this->log_file, 'a'))) return;
            fwrite($this->elog_fp, "\n-------------------------------------------\n");
            fwrite($this->elog_fp, " Sent " . date("Y-m-d H:i:s") . "\n");
            fwrite($this->elog_fp, "-------------------------------------------\n");
        }

        // write to log
        if (!$mode) fwrite($this->elog_fp, "    $text\n");
            else fwrite($this->elog_fp, "$text\n");
    }
}

if(isset($_POST['sub'])) {
    $ok = 1;
    if(empty($_POST['navn'])) {
        echo "Du skal skrive dit navn<br />";
        $ok = 0;
    }

    if(empty($_POST['mail'])) {
        echo "Du skal skrive din mail<br />";
        $ok = 0;
    }

    if(empty($_POST['besked'])) {
        echo "Du skal skrive en besked";
        $ok = 0;
    }

    if($ok == 1) {
        $from = "webmaster@ab-kilholm.dk";
        $to = "kim@hoffmannart.dk";

        $navn = $_POST['navn'];
        $mail = $_POST['mail'];
        $hp = $_POST['hp'];
        $besked = $_POST['besked'];

        $headers = "To: " . $to . "\nFrom: " . $from . "\nReply-to: " . $mail;

        $msg = "Navn: " . $navn . "\n";
        $msg .= "Mail: " . $mail . "\n";
        $msg .= "Hjemmeside: " . $hp . "\n";
        $msg .= "Besked:\n";
        $msg .= $besked;

        $subject = "Mailform på Hoffmannart.dk";

        $smtp = new smtp_client;
        $smtp -> smtp_client();


        $smtp->email($from, $to, $to, $headers, $subject, $msg);
        $smtp->send();
   
   
    }
}

?>
Avatar billede smirnoff Nybegynder
20. maj 2005 - 17:16 #22
ouups ... glemte at sætte ip'en: find linjen;
  $smtp = new smtp_client;

og erstat med

  $smtp = new smtp_client("10.10.0.1");
Avatar billede Angelo Praktikant
20. maj 2005 - 18:11 #23
Det ser ud til at virker:-) jeg kan modtage mail nu. men der kom en fejl, pga. log halløj, og der manglede lige "tak for beskeden" koden... men nu virker det:-)

Du skal have tusind tak for dig hjælp, og god weekend!

koden ser sådan ud:

<?php

class smtp_client {
    var $connection;
    var $server;
    var $elog_fp;



    // default constructor
    function smtp_client($server='10.10.0.1') { //din udbyders smtp server
        if (!$server) $this->server="localhost";
        else $this->server=$server;
 
        $this->connection = fsockopen($this->server, 25);
        if ($this->connection <= 0) return 0;

        $this->elog(fgets($this->connection, 1024));
        $this->elog("HELO xyz\r\n", 1);
        fputs($this->connection,"HELO xyz\r\n");
        $this->elog(fgets($this->connection, 1024));
        }

    function email($from_mail, $to_mail, $to_name, $header, $subject, $body) {
        if ($this->connection <= 0) return 0;

        $this->elog("MAIL FROM:$from_mail", 1);
        fputs($this->connection,"MAIL FROM:$from_mail\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("RCPT TO:$to_mail", 1);
        fputs($this->connection, "RCPT TO:$to_mail\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("DATA", 1);
        fputs($this->connection, "DATA\r\n");
        $this->elog(fgets($this->connection, 1024));

        $this->elog("Subject: $subject", 1);
        $this->elog("To: $to_name", 1);
        fputs($this->connection,"Subject: $subject\r\n");
        fputs($this->connection,"To: $to_name\r\n");

        if ($header) {
            $this->elog($header, 1);
            fputs($this->connection, "$header\r\n");
            }

        $this->elog("", 1);
        $this->elog($body, 1);
        $this->elog(".", 1);
        fputs($this->connection,"\r\n");
        fputs($this->connection,"$body \r\n");
        fputs($this->connection,".\r\n");
        $this->elog(fgets($this->connection, 1024));

        return 1;
        }


    function send() {
        if ($this->connection) {
            fputs($this->connection, "QUIT\r\n");
            fclose($this->connection);
            $this->connection=0;
            }
        }

    function close() { $this->send(); }


    function elog($text, $mode=0) {
        if (!$this->do_log) return;

        // open file
        if (!$this->elog_fp) {
            if (!($this->elog_fp=fopen($this->log_file, 'a'))) return;
            fwrite($this->elog_fp, "\n-------------------------------------------\n");
            fwrite($this->elog_fp, " Sent " . date("Y-m-d H:i:s") . "\n");
            fwrite($this->elog_fp, "-------------------------------------------\n");
        }

        // write to log
        if (!$mode) fwrite($this->elog_fp, "    $text\n");
            else fwrite($this->elog_fp, "$text\n");
    }
}

if(isset($_POST['sub'])) {
    $ok = 1;
    if(empty($_POST['navn'])) {
        echo "Du skal skrive dit navn<br />";
        $ok = 0;
    }

    if(empty($_POST['mail'])) {
        echo "Du skal skrive din mail<br />";
        $ok = 0;
    }

    if(empty($_POST['besked'])) {
        echo "Du skal skrive en besked";
        $ok = 0;
    }

    if($ok == 1) {
        $from = "webmaster@ab-kilholm.dk";
        $to = "kim@hoffmannart.dk";

        $navn = $_POST['navn'];
        $mail = $_POST['mail'];
        $hp = $_POST['hp'];
        $besked = $_POST['besked'];

        $headers = "To: " . $to . "\nFrom: " . $from . "\nReply-to: " . $mail;

        $msg = "Navn: " . $navn . "\n";
        $msg .= "Mail: " . $mail . "\n";
        $msg .= "Hjemmeside: " . $hp . "\n";
        $msg .= "Besked:\n";
        $msg .= $besked;

        $subject = "Mailform på Hoffmannart.dk";

           
        $smtp = new smtp_client;
        $smtp -> smtp_client();


        $smtp->email($from, $to, $to, $headers, $subject, $msg);
        $smtp->send();
       
        if(mail($to, $subject, $msg, $headers)) {
                echo "Tak for din kommentar.";
                exit;
            }

            else {
                echo "En fejl opstod, og mailen blev ikke sendt.";
                exit;
            }
Avatar billede smirnoff Nybegynder
20. maj 2005 - 18:36 #24
Kun glad for at kunne hjælpe :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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