ThWboard Support-Forum (Archiv)

Ort: / Boardübersicht / PHP / MySQL Probleme / Mail Funktion


Seite 1 von 1

subseven schrieb am 21.12.2005 um 23:58 Uhr

Ich hab eine Datei (sendmail.php) mit der ich html emails versenden möchte. Diese wird mit dann sending.php versendet.
Mir schreibt es dann zwar hin dass die Email gesendet wurde aber ich empfange keine.
Der Code von sending.php:

<?
$to=$_POST["emailto"];
$from=$_POST["emailfrom"];
$subject=$_POST["emailsubject"];
$message=$_POST["emailcontent"];
$emailheaders="From: $from\nReply-to: $from\nContent-type: text/html";
$emailsended=mail($to, $subject, $message, $emailheaders);
?>
<?
 if($emailsended){
     <font face="Arial" size="4" color="#FF0000">Your email couldnt be sended to $to</a></font><br><br>;
}
else {
    <font face="Arial" size="4" color="#339933">Your email was sended succesfully to <? echo $to;?></font><br><br>;
}

Was kann an dem Code falsch sein?
Kann es am vielleicht am Provider liegen dass ich keine Mail schicken kann?
Vielleicht könnte ich jemandem von euch die 2 Daten schicken, dass er sie auf seinem Webspace testet?

mfg
subseven

Narodnaja schrieb am 22.12.2005 um 12:12 Uhr

Hmm.

If emailsended dann "Your email couldnt be sended to"
else "your email was sended successfully".

Irgendwie scheint mir deine If-Else-Anweisung falschrum ;)
Mach se mal richtig rum, dann solltest du auch die richtige Meldung bekommen.

Dann solltest du mal nicht php und html so mischen. Wenn der Code wirklich so ist, wundert mich das dass da überhaupt was ausgeführt wird und keine Parser-Fehlermeldung nach einem fehlenden {, ; oder sonstwas kommt ?
Richtig wäre es, nach den { in if und else entweder php abzuschließen ( ?> ) oder mit echo / print zu arbeiten und die Variablen entsprechend einzubinden.
Beispiel:

if($emailsended){
     echo "<font face=\"Arial\" size=\"4\" color=\"#FF0000\">Your email couldnt be sended to " . $to . "</a></font><br><br>";
}

Lass dir doch nach den Änderungen testweise mal die Variablen $to, $from, $subject, $emailheaders und $message auf der Seite mit echo ausgeben, dann siehst du erstmal obs richtig übermittelt wird.
Dann schauen wir weiter.

subseven schrieb am 22.12.2005 um 21:17 Uhr

ja stimmt
hab ich oben vertauscht

Die Daten werden alle übermittelt.

verwende jetzt diesen code

<? if( $emailsended===TRUE ){ 
    echo '<font face="Arial" size="4" color="#339933">Your email was sended succesfully to '.$to.'</font><br><br>';
}else{ 
     echo '<font face="Arial" size="4" color="#FF0000">Your email couldnt be sended to '.$to.'</a></font><br><br>';
}
?>

bekomme ich eine leere seite angezeigt

Narodnaja schrieb am 23.12.2005 um 00:51 Uhr

Antworten gibts im Forum, da haben auch andere was von ;)

1. if( $emailsended===TRUE )
Warum === ? Der übliche Vergleichsoperator ist ==. Drei === prüft auf "Identisch", nicht auf "Gleich".

2. Du schreibst ziemlich unsauberen Code. Obs daran liegt, keine Ahnung. Aber probier doch mal folgenden Code (und schließe den Content-Type auch wie hier mit \n ab):

$to = $_POST['emailto'];
$from = $_POST['emailfrom'];
$subject = $_POST['emailsubject'];
$message = $_POST['emailcontent'];
$emailheaders = "From: " . $from . "\n";
$emailheaders .= "Reply-to: " . $from . "\n";
$emailheaders .= "Content-type: text/html\n";

$emailsended = mail($to, $subject, $message, $emailheaders);

if ( $emailsended == TRUE )
{ 
    echo "<font face=\"Arial\" size=\"4\" color=\"#339933\">Your email was sended succesfully to " . $to . "</font><br><br>";
}
else
{ 
     echo "<font face=\"Arial\" size=\"4\" color=\"#FF0000\">Your email couldnt be sended to " . $to . "</font><br><br>';
}

Warum hast du ein </a> in der else-Anweisung ?
Außerdem verwendest du sehr unsauber ' und ".

Du bist aber sicher, dass die $_POST auch rüberkommen ? Dazu muss REGISTER_GLOBALS auf ON sein (wenn dir das nix sagt, hast du wahrscheinlich keinen Zugriff auf den Server und kannst nix daran ändern).
Probier mal aus, einfach am Anfang ohne weitere Verarbeitung die $_POST auszugeben. Wenn da schon nix kommt, musst du die erstmal anlegen.
Dazu mehr falls das der Fall ist.

subseven schrieb am 23.12.2005 um 01:00 Uhr

Danke habs jetzt endlich geschafft
Der Code den ich gepostet hab war nicht immer sehr sauber :D

auf jeden fall war der emailheader schuld

$to=$_POST["emailto"];
$from=$_POST["emailfrom"];
$subject=$_POST["emailsubject"];
$message=$_POST["emailcontent"];
$headers  = 'From: ' . $from . "\n"; 
$headers .= 'Return-Path: ' . $from . "\n"; 
$headers .= 'MIME-Version: 1.0' ."\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n";
$emailsended=mail($to, $subject, $message, $headers);

if( $emailsended==TRUE ){
    echo '<font face="Arial" size="4" color="#339933">Your email was sended succesfully to '.$to.'</font><br><br>';
}else{ 
    echo '<font face="Arial" size="4" color="#FF0000">Your email couldnt be sended to '.$to.'</font><br><br>';
 }

Danke für deine Hilfe und "Bemühungen" mit mir. ;)

Seite 1 von 1