Avatar billede Slettet bruger
23. juli 2006 - 16:02 Der er 21 kommentarer og
1 løsning

Mail funktion laver fejl

Hej eksperter.

Jeg har en fil("func.php") jeg includer på min index, hvor jeg ellers includer hvilken side man har valgt (via. en $_GET)

func.php den indeholder alle mine functioner, bla.

function sendMail($name, $subject, $phone, $email, $msg2) {
$owerMail = "mainMail@domain.dk";
   
    if (strtoupper(substr(PHP_OS,0,3) == "WIN")) {
      $eol="\r\n";
    } elseif (strtoupper(substr(PHP_OS,0,3)== "MAC")) {
      $eol="\r";
    } else {
      $eol="\n";
    }
   
    if(empty($email))
        $email = "Ikke angivet";
    $subject = getSubjectById($subject);
       
    $headers = "";
    $msg = "";
   
    $headers .= "From: robot@".$_SERVER['SERVER_NAME']. "<robot@".$_SERVER['SERVER_NAME'].">".$eol;
    $headers .= "Reply-To: ".$name." <".$email.">".$eol;
    $headers .= "Return-Path: ".$name." <".$email.">";
   
    $msg .= "Navn: ".$name." har skrevet.".$eol;
    $msg .= "Emne: ".$subject.$eol;
    $msg .= "Tlf. nr.: ".$phone.$eol;
    $msg .= "E-mail: ".$email.$eol.$eol;
    $msg .= "Besked:".$eol;
    $msg .= $msg2;
   
    if(mail($owerMail, "Tickletoe - kontakt formular", $msg, $headers)) {
        return true;
    } else {
        return false;
    }
} // ends the function sendMail


--------------------------------------------------------------

<?PHP
    $sql = "SELECT overskrift, text FROM text WHERE ID = '7'";
    $query = query($sql);
    $r = mysql_fetch_array($query);
/*
print "<pre>";
var_dump($_POST);
print_r($_POST);
print "</pre>";
*/
if(isset($_POST['contact_submit'])) {
    if(validering($_POST['name_input'], 1) && validering($_POST['phone_input'], 2) && validering($_POST['email_input'], 3) && validering($_POST['subject'], 6) && validering($_POST['messages_input'], 4) && $_POST['cLeft'] >= 0) {
        $ok = true;
        if(sendMail($_POST['name_input'], $_POST['subject'], $_POST['phone_input'], $_POST['email_input'], $_POST['messages_input'])) {
            $mailsendt = true;
            $_POST['name_input'] = "";
            $_POST['phone_input'] = "";
            $_POST['email_input'] = "";
            $_POST['messages_input'] = "";
            $_POST['cLeft'] = 500;
        } else {
            $mailsendt = false;
        }
    } else {
        $ok = false;
    }
}
?>
<form action="" method="post">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
    <tr>
        <td colspan="3" class="overskrift"><?PHP echo $r['overskrift']; ?></td>
    </tr>
    <tr>
        <td colspan="3" align="left" valign="top" style="height: 5px;"></td>
    </tr>
    <tr>
        <td colspan="3" class="text"><?PHP echo nl2br($r['text']); ?></td>
    </tr>
    <tr>
        <td colspan="3" align="left" valign="top" style="height: 15px;"></td>
    </tr>
    <tr>
        <td align="left" valign="top" class="text">Navn</td>
        <td width="40%" align="left" valign="top"><input type="text" name="name_input" size="35" value="<?PHP if(isset($_POST['contact_submit'])) { echo validering($_POST['name_input'], 1, true); } ?>" maxlength="64" /></td>
        <td width="30%" align="left" valign="top" class="text" style="color: #FF0000;"><?PHP if(isset($_POST['contact_submit']) && !$ok) { if(validering($_POST['name_input'], 1)) { echo "&nbsp;"; } else { echo "*"; } }?></td>
    </tr>
    <tr>
        <td align="left" valign="top" class="text">Tlf</td>
        <td width="40%" align="left" valign="top"><input type="text" name="phone_input" size="35" value="<?PHP if(isset($_POST['contact_submit'])) { echo validering($_POST['phone_input'], 2, true); } ?>" maxlength="16" /></td>
        <td width="30%" align="left" valign="top" class="text" style="color: #FF0000;"><?PHP if(isset($_POST['contact_submit']) && !$ok) { if(validering($_POST['phone_input'], 2)) { echo "&nbsp;"; } else { echo "*"; } }?></td>
    </tr>
    <tr>
        <td align="left" valign="top" class="text">Email</td>
        <td width="40%" align="left" valign="top"><input type="text" name="email_input" size="35" value="<?PHP if(!empty($_POST['email_input'])) { echo validering($_POST['email_input'], 3, true); } ?>" maxlength="64" /></td>
        <td width="30%" align="left" valign="top" class="text" style="color: #FF0000;"><?PHP if(isset($_POST['contact_submit']) && !$ok) { if(validering($_POST['email_input'], 3)) { echo "&nbsp;"; } else { echo "*"; } }?></td>
    </tr>
    <tr>
        <td align="left" valign="top" class="text">Emne</td>
        <td width="40%" align="left" valign="top">
        <select name="subject">
<?PHP
if(isset($_GET['contactID']))
    $contactID = $_GET['contactID'];
elseif(isset($_POST['subject']))
    $contactID = $_POST['subject'];
else
    $contactID = null;
   
    getSubject($contactID);       
?>
        </select>
        </td>
        <td width="30%" align="left" valign="top" class="text" style="color: #FF0000;"><?PHP if(isset($_POST['contact_submit']) && !$ok) { if(validering($_POST['subject'], 6)) { echo "&nbsp;"; } else { echo "*"; } } ?></td>
    </tr>
    <tr>
        <td align="left" valign="top" class="text">Besked<br /><br />Tegn tilbage <input type="text" name="cLeft" class="text" value="<?PHP if(isset($_POST['contact_submit'])) { echo $_POST['cLeft']; } else { echo "500"; } ?>" size="4" maxlength="4" style="border: 0px; background-color: transparent;" /></td>
        <td width="40%" align="left" valign="top"><textarea name="messages_input" rows="5" cols="30" onKeyUp="return countChars(this.form);" onKeyPress="return countChars(this.form);" onChange="return countChars(this.form);"><?PHP echo validering($_POST['messages_input'], 4, true); ?></textarea></td>
        <td width="30%" align="left" valign="top" class="text" style="color: #FF0000;"><?PHP if(isset($_POST['contact_submit']) && !$ok) { if(validering($_POST['messages_input'], 4)) { echo "&nbsp;"; } else { echo "*"; } } ?></td>
    </tr>
    <tr>
        <td align="center" valign="top" colspan="3"><input type="submit" name="contact_submit" value="Send" /></td>
    </tr>
<?PHP
if(isset($_POST['contact_submit'])) {
    if($ok && $mailsendt) {
        $msg = "Din besked er nu sendt.";
    } elseif ($ok && !$mailsendt) {
        $msg = "Der skete en fejl, prøv igen.";
    } elseif (!$ok) {
        $msg = "Alle felter med de røde stjerner skal udfyldes korrekt.";
    }
?>
    <tr>
        <td align="center" valign="top" colspan="3" style="height: 30px;">&nbsp;</td>
    </tr>
    <tr>
        <td align="center" valign="top" colspan="3" class="mellemrubrik"><?PHP echo $msg; ?></td>
    </tr>
<?PHP
}
?>
</table>

HÅBER I KAN HJÆLPE MIG.
Avatar billede nielle Nybegynder
23. juli 2006 - 17:18 #1
Kan du ikke også lige beskreve fejlen: Hvad er det der sker? Hvad sker ikke? Hvad forventede du der skulle ske? Får du en fejlmeddelese? Eller hvad?
Avatar billede Slettet bruger
23. juli 2006 - 17:21 #2
Nej jeg får nemlig ingen fejl meddelse, og det er det der irriterer mig, får ellers tror jeg sagtens at jeg kunne finde ud af det.

Jeg havde forventet, at den skrev "Beskeden er sendt" når jeg har udfyldt det hele korrekt, men for det meste skriver den "Der skete en fejl, prøv igen.".

Hvis jeg opdatere et par gange (nogen gange) så bliver beskeden lige pludseligt sendt, og jeg kan ikke finde ud af om det er fordi jeg først får lavet en fejl eller hvordan og hvorledes.
Avatar billede nielle Nybegynder
23. juli 2006 - 17:26 #3
Jeg kan da lige starte med at fortælle at man bruger \r\n til at skifte linje i en mail. Det er defioneret på den måde i standarden og det afhænger ikke af operativsystem.
Avatar billede leif Seniormester
23. juli 2006 - 17:27 #4
Hvor ligger siden ?
Avatar billede nielle Nybegynder
23. juli 2006 - 17:40 #5
Er du sikker på at du lave sådan noget som:

$_POST['cLeft'] = 500;

Svjv. kan du ikke selv ændre indholdet af $_POST ?
Avatar billede Slettet bruger
23. juli 2006 - 18:40 #6
Så det er lige gyldigt hvilke operativ system man bruger med henholdt til \r\n osv.?
$_POST['cLeft'] = 500; sætter jeg fordi den tæller ned hvor man chars du har skrevet fra 500, da man maks må skrive 500 chars.
Avatar billede nielle Nybegynder
23. juli 2006 - 18:43 #7
> Så det er lige gyldigt hvilke operativ system man bruger med henholdt til \r\n osv.?

Ja.

> $_POST['cLeft'] = 500; sætter jeg fordi den tæller ned hvor man chars du har skrevet fra 500, da man maks må skrive 500 chars.

Jeg stillede nu også mere spørgsmålstegn ved om det overhovedet ville virke.
Avatar billede Slettet bruger
23. juli 2006 - 18:48 #8
Jamen det er fordi jeg kører noget validering fra en anden funktion, men det ser fucked ud, og det er heller ikke så godt:

function validering ($string, $mode = 1, $return = false) {
/*
### MODE 1: Name
### MODE 2: TLF
### MODE 3: Email
### MODE 4: Message // ZIPCODE
### MODE 5: Adresse
### MODE 6: SUBJECT
### MODE 7: ORDER TIME
### MODE 8: NUMBER


### RETURN STRING: FALSE: OFF
### RETURN STRING: TRUE: ON
*/
    $string = strip_tags($string); // REMOVE ALL PHP AND HTML TAGS FROM A STRING!
    $string = stripslashes($string);
    $answer = true;
   
if ($mode == 1) {
    if((strlen($string) < 6) || (strlen($string) > 64) || is_numeric($string)) {
        if($return)
            $answer = stripslashes($string);   
        else
            $answer = false;
    } else {
        if($return)
            $answer = stripslashes($string);   
        else
            $answer = true;
    }
} elseif ($mode == 2) {
    if((strlen($string) < 8) || (strlen($string) > 16) || !is_numeric($string)) {
        if($return)
                $answer = stripslashes($string);   
            else
                $answer = false;
        } else {
            if($return)
                $answer = stripslashes($string);   
            else
                $answer = true;
        }
} elseif ($mode == 3) {
    if(empty($string))
        return true;
    else
        if(!eregi('^[[:alnum:]][a-z0-9_\.\-]*@[a-z0-9\.\-]+\.[a-z]{2,4}$', $string)) {
            if($return)
                $answer = stripslashes($string);   
            else
                $answer = false;
        } else {
            if($return)
                $answer = stripslashes($string);   
            else
                $answer = true;
        }
} elseif ($mode == 4) {
    if(empty($string)) {
        if($return)
            $answer = stripslashes($string);   
        else
            $answer = false;
    } else {
        if($return)
            $answer = stripslashes($string);   
        else
            $answer = true;
    }
} elseif ($mode == 5) {
    if(!strlen($string) > 5) {
        if($return)
            $answer = stripslashes($string);
        else
            $answer = false;
    } else {
        if($return)
            $answer = stripslashes($string);
        else
            $answer = true;
    }
} elseif ($mode == 6) {
    if($string == "#") {
        if($return)
            $answer = stripslashes($string);   
        else
            $answer = false;
    } else {
        if($return)
            $answer = stripslashes($string);   
        else
            $answer = true;
    }
} elseif ($mode == 7) {
    if(!strstr($string, ":")) {
        if($return)
            $answer = stripslashes($string);   
        else
            $answer = false;
    } else {
        if($return)
            $answer = stripslashes($string);   
        else
            $answer = true;
    }
} elseif ($mode == 8) {
    if(!strlen($string) >= 0) {
        if($return)
                $answer = stripslashes($string);   
            else
                $answer = false;
    } else {
            if($return)
                $answer = stripslashes($string);   
            else
                $answer = true;
    }
}
    return $answer;
}

Og der printer jeg dem ud igen i felterne hvis mailen ikke bliver sendt.
Men hvis mailen bliver sendt skal den jo reset de andre felter, og feltet cLeft, skal starte på 500, så det er nu mere hvis man nu skal sende en til eller lign.

For når du loader siden på ny, glememr den jo $_POST, og der bliver den sat til 500.
Tegn tilbage <input type="text" name="cLeft" class="text" value="<?PHP if(isset($_POST['contact_submit'])) { echo $_POST['cLeft']; } else { echo "500"; } ?>" size="4" maxlength="4" style="border: 0px; background-color: transparent;" />
Avatar billede Slettet bruger
23. juli 2006 - 18:49 #9
Men kan du se nogen fejl, i selve mail funktionen?
sendMail()?
Avatar billede Slettet bruger
23. juli 2006 - 18:56 #10
Ved ikke hvor det er fejlen går galt men det er ikke sendMail();

Prøvede lige at lave en anden fil, hvor jeg includer func.php, og bruger funktionen som den virker på siden.

Der er ingen fejl der.
Avatar billede Slettet bruger
23. juli 2006 - 19:10 #11
Og har også prøvet at sætte validering på min test, og der virker den fint.
Så det må være selve siden.

<?PHP
include("func.php");
$navn = "Nanv navn";
$tlf = 88888888;
$emen = 5;
$mail = "minmail@domain.dk";
$tekst = "Min tekst om dette virker!";
if(validering($navn, 1) && validering($tlf, 2) && validering($mail, 3)) {
    if(sendMail($navn, $emne, $tlf, $mail, $tekst)) {
        echo "Fint!";
    } else {
        echo "Ikke!";
    }
    echo "- Validering fin";
} else {
    echo "Validering er ikke god nok!";
}
?>
Avatar billede jakobdo Ekspert
23. juli 2006 - 20:19 #12
Nielle: Dit indlæg: 23/07-2006 17:26:04
Jeg kan fortælle at på min freebsd server, hvis jeg bruger \r\n i mail(), så bliver emailen "fucked up".
Hvis jeg derimod kun bruger \n, så er emailen som forventet!
Så nogle gange skal man altså nøjes med \n.
Det kan selvfølgelig også skyldes en fejlopsætning af serveren!
Avatar billede nielle Nybegynder
23. juli 2006 - 20:54 #13
Det skulle ikke undre mig hvis det går galt på diverse implementeringer, men i følge standarden:

http://www.ietf.org/rfc/rfc0821.txt

- skal linjer i en mail afslittes med <CRLF>, altså \r\n.

Når det går galt er det imidlertid mailprogrammets skyld og ikke operativsystemets.
Avatar billede Slettet bruger
23. juli 2006 - 22:36 #14
Men det er da mega underligt, for nu har jeg jo sam sagt kørt funktionen validering(), og mailSend() på en ny side, og der virker det jo som funventet.

Jeg må have lavet en fejl i selve html, og mit PHP tingeling, det må jeg lige få tjekket igennem.
Avatar billede Slettet bruger
24. juli 2006 - 14:02 #15
Jakobdo: Nielle har ret. Citat fra http://dk.php.net/manual/da/function.mail.php

        Bemærk: Hvis beskeden ikke bliver modtaget, prøv så kun at benytte LF (\n). Nogle dårlige Unix mailservere udskifter LF med CRLF automatisk, hvilket bliver til dobbelt CR hvis CRLF er brugt. Dette skal være den sidste udvej, da metoden ikke overholder RFC 2822 standarden.

Så vidt jeg husker, er qmail en af de servere, som laver fejl i det. Jeg vil tro den oprindelige sendmail gør det korrekt.
Avatar billede nielle Nybegynder
24. juli 2006 - 14:06 #16
Det var så et link til RFC 821 jeg fik postet .. den er sidenhen erstattet af 2822:

http://www.ietf.org/rfc/rfc2822.txt
Avatar billede jakobdo Ekspert
24. juli 2006 - 14:58 #17
Hov hov: det er ikke mig i skal overbevise! :o)
Jeg siger bare hvordan min server virker.
Det er coldgate som rent faktisk har et kode problem.
Avatar billede nielle Nybegynder
24. juli 2006 - 15:09 #18
Heh :^)

Øjensynligt er det jo så forsvundet i mellemtiden :^) - 23/07-2006 22:36:45
Avatar billede nielle Nybegynder
07. august 2006 - 20:55 #19
Lukketid?
Avatar billede Slettet bruger
07. august 2006 - 21:06 #20
Ja det må da sige.
Jeg har kontakte B-one som er hostet, og det er dem der har sat sikkerhed på deres mail(), funktion pga. spam sikkerhed.

Det man skal gøre af at den "FROM" der er i scriptet skal være til en email der er på ens eget domain, altså en robot@mit-domain.dk, så der er en afsender.
Det var deres svaar i hvert fald og det lader til at virke helt fint.
Avatar billede jakobdo Ekspert
07. august 2006 - 21:34 #21
B-One har været oppe og vende mange gange.
Deres spam-restriktioner er bygget sådan her sammen:

For at gøre det sværere at udsende spam fra, er der restriktioner på afsendelse af post fra webserverne.

Systemet deler post op i tre kategorier:
0: Post med en kendt afsenderadresse på domænet
1: Post til en kendt adresse på domænet
2: Alt andet

Al post i kategori 0 og 1 slipper igennem. Hver gang et brev i kategori 2 accepteres sætter systemet en ventetid på <antal modtagere>*5 minutter før næste brev i kategori 2 accepteres.

Den post man selv afsender (f.eks. nyhedsbreve og lign.) bør have en afsenderadresse på domænet, og vil dermed havne i kategori 0.

Kopi her fra: http://www.eksperten.dk/spm/618736 -> 19/05-2005 10:54:36
Avatar billede Slettet bruger
08. august 2006 - 06:02 #22
lukker
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