Seite 1 von 3

Problem beim versenden von emails mit emailer.php von phpbb

Verfasst: 11.01.2005 18:19
von Lord_Femto
vorweg tritt folgender fehler auf, wenn ich über ein kontakt-formular eine email versenden lassen will.
Warning: filesize() [function.filesize]: Stat failed for (errno=2 - No such file or directory) in /www/htdocs/inu/includes/emailer.php on line 98
tja. nun geht es um folgendes. die email wird versendet. jedoch wird das template irgendwie nicht angenommen. keine ahnung warum. am besten ich poste einmal hier alles wichtige:

funktion der emailer.php:

Code: Alles auswählen

function use_template($template_file)
	{
		global $boot_root_path;

		if (trim($template_file) == '')
		{
			message_die(GENERAL_ERROR, 'No template file set', '', __LINE__, __FILE__);
		}

		if (empty($this->tpl_msg[$template_file]))
		{
			$tpl_file = $boot_root_path . 'email/' . $template_file . '.tpl';
		
			if (!@file_exists(@phpbb_realpath($tpl_file)))
			{
				$tpl_file = $boot_root_path . 'email/' . $template_file . '.tpl';

				if (!@file_exists(@phpbb_realpath($tpl_file)))
				{
					message_die(GENERAL_ERROR, 'Could not find email template file :: ' . $template_file, '', __LINE__, __FILE__);
				}
			}

			if (!($fd = @fopen($tpl_file, 'r')))
			{
				message_die(GENERAL_ERROR, 'Failed opening template file :: ' . $tpl_file, '', __LINE__, __FILE__);
			}

			$this->tpl_msg[$template_file] = fread($fd, filesize($this->tpl_file));
			fclose($fd);
		}

		$this->msg = $this->tpl_msg[$template_file];

		return true;
	}
ausführung der funktionen in der jeweiligen datei. hier die contact.php:

Code: Alles auswählen

if ( !$error )
	{
		include($boot_root_path . 'includes/emailer.'.$phpEx);

		$emailer = new emailer(0);
	
		$emailer->from($page_config['page_email']);
		$emailer->replyto($page_config['page_email']);

		for ($i = 0; $i < count($bcc_list); $i++)
		{
			$emailer->bcc($bcc_list[$i]);
		}

		$email_headers = 'X-AntiAbuse: Board servername - ' . $page_config['server_name'] . "\n";
	
		$emailer->use_template('contact_email');
		$emailer->email_address($page_config['page_email']);
		$emailer->set_subject($subject);
		$emailer->extra_headers($email_headers);

		$emailer->assign_vars(array(
			'SITENAME' => $page_config['page_name'], 
			'BOARD_EMAIL' => $page_config['page_email'],
			'L_NAME' => $name,
			'L_EMAIL' => $email,
			'L_CONTENT' => $content)
		);
		
		$emailer->send();
		$emailer->reset();

		message_die(GENERAL_MESSAGE, 'E-Mail wurde gesendet<br /><br />' . sprintf('Hier klicken, um zurück zu kehren',  '<a href="index.'.$phpEx.'?show=contact">', '</a>'));
	}
}	

if ( $error )
{
	message_die(GENERAL_MESSAGE, $error_msg);
}
und der code der template datei, die im pfad root/email/contact_email.tpl vorliegt:

Code: Alles auswählen

Charset: iso-8859-1

{SITENAME}
{BOARD_EMAIL}

Die Nachricht :
~~~~~~~~~~~~~~~

Name: {L_NAME}
E-Mail: {L_EMAIL}

Nachricht: {L_CONTENT}
beim empfangen der email sehe ich zwar email adresse und subject aber nicht den email inhalt.

auffällig ist, dass in der fehlermeldung nach Stat failed for der pfad der template datei nicht angezeigt wird.

bitte um hilfe. der fehler ist bestimmt banal aber ich finde ihn nicht.

HINWEIS: Wie man sieht lehnt sich diese ganze Code-Geschichte an phpbb an.

Verfasst: 12.01.2005 00:05
von Blutgerinsel
Dann würde ich mal prüfen ob

der Pfad zum Template in
/www/htdocs/inu/includes/emailer.php

richtig ist zu
root/email/contact_email.tpl

Was bei dir nun der root Pfad ist und was in der globalen
$boot_root_path steht ist unbekannt bzw. nicht ersichtlich....

auch
No such file or directory
bemängelt bereits den Fehler unmißverständlich.....

man könnte sogar auf die Idee kommen in der Klasse/Methode den Pfad auszugeben und alle 3 Dirs mit einander zu vergleichen.......

Naja....

Verfasst: 12.01.2005 17:48
von Lord_Femto

Code: Alles auswählen

$boot_root_path = './';
$tpl_file wird irgendwie gar nicht ausgegeben.

kann es eine ursache haben, dass ich eine index.php benutze, wo der ganze inhalt etc. mittels switch-abfrage included wird?

Verfasst: 12.01.2005 19:57
von Blutgerinsel
Was ist bei dir $_SERVER['DOCUMENT_ROOT']

/www/htdocs/ ?

wenn ja dann befindet sich die emailer.php 2 Verzeichnisebenen unter dem Rootdir.....

weil /inu/includes/

d.h. du müsstest um ins root zu kommen 2 Ebenen höher....
was durch ../../ erreicht wird.....

Oder du setzt einen absoluten Pfad abgehend vom Rootdir via $_SERVER['DOCUMENT_ROOT'].......

Verfasst: 15.01.2005 17:45
von Lord_Femto
du hast recht. $_SERVER['DOCUMENT_ROOT'] ist bei mir irgendwas mit /www/htdocs/irgendeine_nummer...

aber warum muss ich, um ins root zu kommen, zwei ebenen höher. dann frage ich mich, warum das bei phpbb geht und bei mir nicht? habe ich irgendetwas übersehen?

wo muss ich ../../ hinzufügen?

Verfasst: 15.01.2005 19:20
von Blutgerinsel
dort wo du das Template öffnest bzw. übergibst das befindet sich ja 2 Ebenen höher....

Denke

../../email/contact_email.tpl

Weitere Möglichkeit wäre
$_SERVER['DOCUMENT_ROOT'].'email/contact_email';

Mach dir klar das Script X1 befindet sich in Dir X2 relativ davon müssen Files die in Y liegen dann realtiv entsprechend angegeben werden

Verfasst: 16.01.2005 01:27
von Lord_Femto
ok, ok. soweit so gut.

aber eine frae. ich verstehe nicht, warum es dann bei phpbb funktioniert.

bei mir ist es so. www/htdocs/123456/

contact.php
includes/emailer.php
email/contact_email.tpl

äquivalent verhält es sich aber doch auch bei phpbb.

z.b.

privmsg.php
includes/emailer.php
languages/email/contact_email.tpl

aber warum funktioniert es bei mir nicht genauso?!?

Verfasst: 16.01.2005 11:36
von Blutgerinsel
Lord_Femto hat geschrieben:ok, ok. soweit so gut.
Das heisst es geht jetzt ?

Bei PHPBB gibt es eine Variable $php_root_path oder so ähnlich in dieser steht gerade der relative Vorteil......

Wenn ich in Path X bin muss ja schließlich das Script wissen wo ist das was ich öffnen oder einbinden soll wenn es nicht im gleichen Path liegt............

Verfasst: 16.01.2005 15:07
von Lord_Femto
aber dafür habe ich doch $boo_root_path , oder?

nein funktioniert noch nicht.

Verfasst: 16.01.2005 15:23
von Pyramide
Blutgerinsel hat geschrieben:Bei PHPBB gibt es eine Variable $php_root_path oder so ähnlich
Lord_Femto hat geschrieben:aber dafür habe ich doch $boo_root_path , oder?
Die Variable muss $phpbb_root_path heißen - selbstbenannte Variablen prüft phpBB nicht, nur weil sie mit root_path enden :roll: