PHP Mail Nachricht "0"

Hallo,

ich habe ein Skript, das dem Benutzer eine E-Mail mit seinen Zugangsdaten schickt. Leider wird jedoch als Nachricht "0" angezeigt.
PHP:
<?php
require_once("./lib/define.php");
mysql_connect(DBHOST,DBUSER,DBPASS) or die("Error ".mysql_errno().": ".mysql_error());
mysql_select_db(DBNAME) or die("Error ".mysql_errno().": ".mysql_error());
$uname = $_POST["Uname"];
$upass = $_POST["Upass"];
$upass2= $_POST["Upassw"];
$to = $_POST["Uemail"];
$subject = "Ihre Registrierung beim EEP Gemeinschaftsprojekt";
$message = 'Sie haben sich erfolgreich beim EEP Gemeinschaftsprojekt registriert. Bitte heben Sie diese E-Mail gut auf, denn ich haben keine Möglichkeit an ihr Passwort heranzukommen,"
falls sie es verlieren. Hier ihre Zugangsdaten:\n"
Benutzername: '.$uname.'\nPasswort: '.$upass.'\n';
$additional_headers = "From: mb1-anlagen@web.de";
if ($_POST["anlage"] == "Fischbach") $aid = 0;
else $aid = 1;

if($uname == "" || $upass == "" || $upass2 == "" || $to == "") {
    Header("Location: ./?s=regist&e=3&sid=".session_id());
}elseif ($upass != $upass2) {
    Header("Location: ./?s=regist&e=2&sid=".session_id());
}else{
    $iquer = mysql_query("SELECT `index` FROM `users` WHERE `anlagenid` = '".$aid."' ORDER BY `index` DESC") or die("Error ".mysql_errno().": ".mysql_error());
    $lastindex = mysql_fetch_object($iquer);
    $index = $lastindex->index + 1;
    $query = mysql_query("INSERT INTO `users` (`name`, `passwort`, `email`, `registrierungsdatum`, `index`, `anlagenid`) VALUES ('".$uname."', '".sha1(md5($upass))."', '".$to."', '".date("Y-m-d")."', '".$index."', '".$aid."')") or die("Error ".mysql_errno().": ".mysql_error());
    if($query == true) {
        $mail = mail($to, $subject, $message, $additional_headers);
        if($mail == true) {
            ?><script type="text/javascript">alert('Sie sollten nun in kürze eine E-Mail mit ihren Zugangsdaten erhalten.');window.location.href = './';</script>
            <?php
        }else{
            ?><script type="text/javascript">alert('Die E-Mail konnte nicht versandt werden.');window.location.href = './';</script>
            <?php
        }
    }else{
        ?><script type="text/javascript">alert('Fehler beim Schreiben in die Datenbank');window.location.href = './';</script>
        <?php
    }
}
?>
Wieso schreibt er "0" statt dem Inhalt von $message?
 
also erstmal is das script anfällig gegen sql injections ;)
warum die nachricht 0 anzeigt frag ich mich auch grad, sollte eigentlich nicht der fall sein.

schau mal mit var_dump($message); nach, was die variable für werte nach deklaration und vor aufruf der mail() funktion enthält.
 
Nach kurzem Überfliegen würde ich den Fehler bei den ganzen Anführungszeichen vermuten. Außerdem fürchte ich, dass das mit den einfachen Anführungszeichen und dem Zeilenumbruch nicht hinhaut.
'\n' wird anders interpretiert als "\n" und die Steuerzeichen \n, \r, \t, usw. funktionieren nur bei " ".
Bleibe am besten bei einer Hochkomma-Art, (" " würde sich da anbieten) und maskiere weitere Anführungszeichen innerhalb des Strings mit einem \.

Z.B. so:
Code:
[COLOR=#000000][COLOR=#0000BB][FONT=verdana]$[/FONT]message [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"Sie haben sich erfolgreich beim EEP Gemeinschaftsprojekt registriert.
Bitte heben Sie diese E-Mail gut auf, denn ich haben keine Möglichkeit an ihr Passwort heranzukommen,
falls [u]S[/u]ie es verlieren. Hier ihre Zugangsdaten:\nBenutzername: "[/COLOR][COLOR=#007700] . [/COLOR][COLOR=#0000BB]$uname [/COLOR][COLOR=#007700]. [/COLOR][COLOR=#DD0000]"\nPasswort: "[/COLOR][COLOR=#007700] . [/COLOR][COLOR=#0000BB]$upass [/COLOR][COLOR=#007700]. [/COLOR][COLOR=#DD0000]"\n"[/COLOR][COLOR=#007700];[/COLOR][/COLOR]

Und wie easteregg schon schrieb ist dein Script sehr unsicher. Verwende niemals ungeprüfte Variablen wenn du ein Query zusammenbaust und die Session-ID solltest du auch nicht per GET übertragen (Stichwort: Session-Hijacking).
 
Wo bittte übergebe ich Sessions mit $_GET? Und wie will man da bitte SQL Injections machen (gut, ich habe relativ wenig Ahnung von SQL Injections), denn die URL muss ja dann wohl lauten:
Code:
Http://www.addresse.de/registrieren.php
 
Nur dass da halt die Session ID leer ist, der Benutzer ist ja schließlich nicht angemeldet.

Es geht ja drum dass jemand dem Nutzer die Session klauen kann. Wenn er nicht angemeldet ist, dann brauchst du doch theoretisch keine Sessions an der Stelle?


Bezüglich den SQl-Injections:

PHP:
$uname = $_POST["Uname"];
$upass = $_POST["Upass"];

Du solltest die Inhalte der Variablen überprüfen ehe du die im

PHP:
$query = mysql_query("INSERT INTO `users` (`name`, `passwort`, `email`, `registrierungsdatum`, `index`, `anlagenid`) VALUES ('".$uname."', '".sha1(md5($upass))."', '".$to."', '".date("Y-m-d")."', '".$index."', '".$aid."')") or die("Error ".mysql_errno().": ".mysql_error());

einfach so verwendest.
 
Zuletzt bearbeitet:
Wie kommst du auf die Idee, dass das auf Windows läuft?

Warum sollte es nicht? War eine Möglichkeit. Laut deiner Signatur benutzt du (auch) Windows.

Das Skript läuft natürlich unter Linux!
Dann schreibe es doch das nächste mal gleich dazu. Warum "natürlich unter Linux"? Gibt eine Menge mehr Systeme unter denen php läuft.

Die Mailfunktion an sich passt. Deine Zeilenumbrüche funktionieren aufgrund der "'" nicht, aber das wurde dir ja schon gesagt und ist auch nicht das Problem. Wenn ich deinen Code auf ein Minimum reduziere funktioniert das hier.

PHP:
<?php

$uname = "mime";
$upass = "mime";
$to = "mime@example.com";

$subject = "Ihre Registrierung beim EEP Gemeinschaftsprojekt";

$message = 'Sie haben sich erfolgreich beim EEP Gemeinschaftsprojekt registriert. Bitte heben Sie diese E-Mail gut auf, denn ich haben keine Möglichkeit an ihr Passwort heranzukommen,"
falls sie es verlieren. Hier ihre Zugangsdaten:\n"
Benutzername: '.$uname.'\nPasswort: '.$upass.'\n';
$additional_headers = "From: mime@gmx.de";

$mail = mail($to, $subject, $message, $additional_headers);

print $mail;
        
?>
Ergebnis: 1

Was sagt denn das Log des Mailservers zu der ganzen Geschichte?

Micha
 
Vielleicht schaust du dir nochmal meine Signatur an :rolleyes:

Siehst du sonst noch ein OS, das ich benutzen könnte :confused:

Da steht auch Windows drin... jetzt aber zurück zum Thema... Dir wurden ja schon Änderungsvorschläge gemacht. Schreib mal deinen jetzigen Code nochmal rein, falls das Problem noch besteht. Und gegebenenfalls was mime meinte, die logs.
 
Zurück
Oben