Weiße Seite nach php-Aktion und Emailversand

kekskruemel

Angesehenes Mitglied
Hallo,

ich habe ein Problem mit einer PM Funktion auf meiner Webseite. früher hat diese mal funktioniert. Seit dem Umzug auf einen anderen Server (mit u.a. PHP5) funktioniert meine alte php Datei dazu nicht mehr korrekt.

Die Datei versendet für gewöhnlich Pm Nachrichten. Die Nachrichten werden korrekt in die Datenbank eingetragen. Anschließend soll der Nutzer, insofern er dies im Profil aktiviert hat, per Email auf die PM hingewiesen werden.
CODE // Versenden von PM Nachrichten und E-mail Information
if(@$_GET['action'] == "send")
{
$msg = ""; $fehl = 0;
$_SESSION['pm_to'] = @$_POST['pm_to'];
$_SESSION['pm_head'] = @$_POST['pm_head'];
$_SESSION['pm_text'] = @$_POST['text'];

$sel = "SELECT user_login, user_id, user_email, user_pm_get, user_last_pm, user_pm_ignore, user_pm_mail FROM users WHERE user_login = '".$_POST['pm_to']."' ";
$sql = mysql_query($sel);
$ds = mysql_fetch_object($sql);

$array = explode(",",$ds->user_pm_ignore);
if(in_array($_SESSION['sess_user_id'],$array))
{
$msg .= $lang['msg_pm_ignore'];
$fehl++;
}
if(@$_POST['pm_to'] == "")
{
$msg .= $lang['msg_pm_empfae'];
$fehl++;
}
$jetzt = time();
$zeit = $jetzt - $_SESSION['sess_user_last_pm'];
if($zeit <= 60)
{
$msg .= $lang['msg_pm_anti_spam'];
$fehl++;
}
if(@$_POST['text'] == "")
{
$msg .= $lang['msg_pm_notext'];
$fehl++;
}
if($ds->user_pm_get == 0)
{
$msg .= $lang['msg_pm_nopm'];
$fehl++;
}
if(@$_POST['pm_head'] == "")
{
$_POST['pm_head'] = "[".$lang['pm_head_no']."]";
}

if($fehl >= 1)
{
$_GET['action'] = "neu";
}
elseif($fehl == 0)
{
$insert = "INSERT INTO nachrichten (pm_to, pm_from, pm_send, pm_head, pm_text) VALUES (\"".$ds->user_id."\", \"".$_SESSION['sess_user_id']."\", UNIX_TIMESTAMP( ), \"".@$_POST['pm_head']."\", \"".$_POST['text']."\") ";
$i_sql = mysql_query($insert);
if($i_sql)
{
$update = "UPDATE users SET user_last_pm = UNIX_TIMESTAMP( ) WHERE user_id = '".$_SESSION['sess_user_id']."' ";
$u_sql = mysql_query($update);
$ds->user_pm_mail;
if($ds->user_pm_mail == 1)
{
//MAIL SENDEN
// GLOBALE VARIABELN //
global $pm_mail;
////////////////////////////////////////////////
// ALLGEMEINES ZUR EMAIL - LOGO //
////////////////////////////////////////////////
$text = @$_SERVER['REQUEST_URI'];
$treffer = strrchr($text, '/');
$pfad = str_replace($treffer, '', $text);
$server = "<img src='http://".$_SERVER['HTTP_HOST'].$pfad."/img/logo.gif'>";
////////////////////////////////////////////////

$absender = "geaendert@tankcheck.de";
$get_email= $ds->user_email;
$get_name = $ds->user_login;
$tmp_file = TEMPLATE_DIR."/email/".$_SESSION['sess_lang']."_neuepm.html";
$error = $lang['msg_no_template'];
$content = "";
$file = @fopen($tmp_file, "r");
if(!$file)
{
echo $error;
}
else
{
while(!feof($file))
{
$temp = fgets($file, 4096);
$content .= $temp;
}
}
$content = str_replace("{server}", $server, $content);
$content = str_replace("{sender_name}", $_SESSION['sess_user_login'], $content);
$content = str_replace("{get_name}", $get_name, $content);
$content = str_replace("{get_email}", $get_email, $content);
$betreff_detail = $lang['pm_mail_from']." ".$user_detail->user_login." ";
$absender_name = "Tankcheck.de";

$adresse = $get_email;
$betreff = $betreff_detail;
$inhalt = $content;

// Aktueller Pfad
$pfad = get_include_path();
// Pfad erweitern
$pfad .= PATH_SEPARATOR . './phpmailer';
// Pfad setzen
set_include_path($pfad);
// Die Klasse einbinden
require_once 'class.phpmailer.php';
// Das Objekt erzeugen
$mail = new PHPMailer();
// Wenn mit der Language-Datei gearbeitet werden soll,
// dann setzten wir hier die Sprache und Pfad
$mail->SetLanguage ("de", "./phpmailer/language/");
// In den meisten Fällen benutzen wir einen SMTP-Server
$mail->IsSMTP();
// Der SMTP-Server ist der gleiche Server, wie er im Mail-Client
// (Outlook, Pegasus, etc) eingetragen ist
$mail->Host = "Tankcheck.de";
// Meistens wird eine Authentifizierung gebraucht
$mail->SMTPAuth = true;
// Der Benutzername, wie er im Mail-Client eingetragen ist
// Nicht zu verwechseln mit der Mail-Adresse, bei manchen
// Servern ist aber der Benutzername gleich der Adressse
$mail->Username = "nutzername@tankcheck.de";
// Und nun das Passwort, wie es auch im Mail-Client benutzt wird.
$mail->Password = "Password";
// Die Absenderadresse
$mail->From = $absender;
// Der Absendername, nicht zwingend erforderlich
$mail->FromName = "Tankcheck.de Benzinpreisvergleich";
// Die Empfängeradresse eintragen, der zweite Parameter ist optional
$mail->AddAddress($adresse);
// Der Betreff
$mail->Subject = $betreff;
// Wenn man eine HTML-Mail verschicken möchte
$mail->IsHTML(true);
// Der HTML-Body
$mail->Body = $inhalt;
// Also schicken wir die Mail ab
if( ! $mail->Send())
{
// echo "Mailer Error: " . $mail->ErrorInfo;
}
if($mail)
{
return TRUE;
}
elseif(!$mail)
{
return FALSE;
}
}
$_SESSION['pm_to'] = "";
$_SESSION['pm_head'] = "";
$_SESSION['pm_text'] = "";
$_GET['action'] = "eingang";
}
else
{
$_GET['action'] = "neu";
}

}
}


Ich habe bereits von der normalen mail() Funktion auf phpmailer umgestellt. Nun versendet es auch die Emails an den Nutzer. Der Eintrag in die Datenbank funktioniert wie gesagt auch. Aber anstatt am Ende wieder auf den Nachrichteneingang zurück zu gehen bei erfolgreicher Durchführung, zeigt er lediglich eine leere weiße Seite an.

Nehme ich genau den E-Mailversand heraus - so funktioniert alles, aber die Mail wird natürlich dann weggelassen, aber er wechselt korrekterweise in den Posteingang.


Findet jemand den Fehler?
 
Moin,

kann es sein das die schließende Klammer am Anfang von dem Block

}
$_SESSION['pm_to'] = "";
$_SESSION['pm_head'] = "";
$_SESSION['pm_text'] = "";
$_GET['action'] = "eingang";

eine zu viel ist?
 
das habe ich kontrolliert. das ist nicht das Problem, das passt genau so. Oben gehen 4 auf und die schließe ich unten wieder.

Von "//Mail Senden" bis "return FALSE;
}" kann ich alles ausklammern, dann kommt die weiße Seite nicht mehr sondern geht passend über in den Eingang.

Also genau das vom Mail versenden. Aber wenn ich es drin lasse, versendet er die Mail, d.h. dieser Prozess scheint zumindest grob zu stimmen.
 
mach mal aus dem

elseif(!$mail)
{
return FALSE;
}

entweder ein

else if(!$mail)
{
return FALSE;
}

oder lass das if(!mail) einfach weg.
 
das ändert nichts, aber es liegt irgendwie daran.

Wenn ich aus
CODE if($mail)
{
return TRUE;
}
else if(!$mail)
{
return FALSE;
}


ein
CODE if($mail)
{

}
else if(!$mail)
{

}

mache, dann geht er auf den Eingang und versendet die Mail. einziges Manko: Den Inhalt der Email schreibt er ebenfalls einfach mit auf die Seite des Posteingangs als Textinhalt.
 
wenn ich das richtig sehe schreibst du in dem Script den Inhalt der Nachricht in die Session - wird das im Posteingang vielleicht wieder ausgelesen?

Kommentier mal

$_SESSION['pm_to'] = "";
$_SESSION['pm_head'] = "";
$_SESSION['pm_text'] = "";

aus und schau ob die Daten immer noch auf der Seite vom Posteingang da sind. Wüsste nicht wozu das sonst gut sein sollte da die Mail ja schon raus ist...
 
Danke dir für die Hilfe.

Ich habe es nun gefunden.
Die Inhalte der Mail werden in die variable $content geschrieben, die später auch im Posteingang für die Inhalte verwendung findet.
Ich habe nun die $content im Aufruf des Posteingangs zuvor als leer gesetzt, vor einem neuaufbau. Dadurch klappt nun alles.
Vielen Dank!
 
Zurück
Oben