e-Mail an Forumadmin versenden-Error

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
Itac
Mitglied
Beiträge: 19
Registriert: 22.08.2003 16:09
Wohnort: Rostock
Kontaktdaten:

e-Mail an Forumadmin versenden-Error

Beitrag von Itac »

Hallo,

ich versuche gerade eine Funktion zu bauen die eine Mail an
den Admin versendet. Meine Vorlagen war die function user_notification.

Code: Alles auswählen

function AdminInfo($mode, &$post_data, &$topic_title, &$forum_id, &$topic_id, &$post_id, &$notify_user)
{
	global $board_config, $lang, $db, $phpbb_root_path, $phpEx;
	global $userdata, $user_ip;

$aktemp='Der Beitrag "'.$post_data['poster_post'].'" wurde';

if($mode == 'delete')	{$aktemp=$aktemp.' gelöscht';}		else
if($mode == 'reply')	{$aktemp=$aktemp.' beantwortet';}	else
if($mode == 'editpost')	{$aktemp=$aktemp.' bearbeitet';}	else
if($mode == 'newtopic')	{$aktemp=$aktemp.' neu erstellt';}	else {$aktemp=$aktemp.$mode;};
$aktemp=$aktemp.' von '.$userdata['username'].'.';

if (preg_match('/[c-z]:\\\.*/i', getenv('PATH')) && !$board_config['smtp_delivery'])
	{
	$ini_val = (@phpversion() >= '4.0.0') ? 'ini_get' : 'get_cfg_var';
	$board_config['smtp_delivery'] = 1;				
	$board_config['smtp_host'] = @$ini_val('SMTP'); 
	}
				
include($phpbb_root_path . 'includes/emailer.'.$phpEx);
$emailer = new emailer($board_config['smtp_delivery']);												
$script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path']));			
$script_name = ($script_name != '') ? $script_name . '/viewtopic.'.$phpEx : 'viewtopic.'.$phpEx;
$server_name = trim($board_config['server_name']);													
$server_protocol = ($board_config['cookie_secure']) ? 'https://' : 'http://';						
$server_port = ($board_config['server_port'] <> 80) ? ':' . trim($board_config['server_port']) . '/' : '/'; 
$emailer->from($board_config['board_email']);														
$emailer->replyto($board_config['board_email']);
$emailer->use_template('admin_info', $user_lang);
$emailer->set_subject($lang['Topic_reply_notification']);											
$emailer->msg = preg_replace('#[ ]?{USERNAME}#', '', $emailer->msg);
$emailer->assign_vars(array(
	'EMAIL_SIG' => (!empty($board_config['board_email_sig'])) ? str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']) : '',
	'USERNAME' => $userdata['username'],
	'SITENAME' => $board_config['sitename'],
	'TOPIC_TITLE' => $topic_title, 
	'POST_TEXT' => $post_text, 
	'POSTERNAME' => $post_data['username'], 
	'FORUM_NAME' => $board_config['forum_name'], 
								
	'U_TOPIC' => $server_protocol . $server_name . $server_port . $script_name . '?' . POST_POST_URL . "=$post_id#$post_id")
);

$emailer->send();
$emailer->reset();
}
Die Funktion rufe ich in der posting.php auf wenn jemand eine Message
erstellt/antwortet/ändert.
bis hier hin OK
nun erhalte ich die Fehlermeldung:
"Ran into problems sending Mail. Response: 503 Need RCPT (recipient)
DEBUG MODE
Line : 184
File : E:\web\janaserver\html\forum\phpBB2\includes\smtp.php"

auf http://www.tecchannel.de/internet/819/2.html geht daraus
hervor das die Komandos in falscher Rehienfolge kommen/
er RCPT (was ist das?) benötigt.

Benachrichtigungnen bei Antwort auf Artikel funktiniert.

Die Funktion mail(...) geht nicht, da hageln Fehler ala "will smtp" etc.
(http://www.phpbb.de/viewtopic.php?t=269 ... +versenden)

Hat jemand eine Idee? Ich kann nur nach der "try and error"-Methode
vorgehen.
Da soll ein einfacher Admin_notification Mod werden. Der einfacher sein
soll als der der hier im Board herumgeistert.

Ein Gruß
Benutzeravatar
Itac
Mitglied
Beiträge: 19
Registriert: 22.08.2003 16:09
Wohnort: Rostock
Kontaktdaten:

Beitrag von Itac »

nutze 2.0.6 er Version
Acid
Ehrenadmin
Beiträge: 12195
Registriert: 26.04.2001 02:00
Wohnort: Berlin

Beitrag von Acid »

Code: Alles auswählen

function AdminInfo($mode, &$post_data, &$topic_title, &$forum_id, &$topic_id, &$post_id, &$notify_user)
{
	global $board_config, $lang, $db, $phpbb_root_path, $phpEx;
	global $userdata, $user_ip;

	$sql = "SELECT u.user_id, u.user_level, u.user_email, u.user_lang, u.username, t.topic_id, t.topic_title, p.post_time, p.poster_id, p.post_username, f.forum_id, f.forum_name
		FROM ". USERS_TABLE ." u, ". TOPICS_TABLE ." t, ". POSTS_TABLE ." p, ". FORUMS_TABLE ." f
		WHERE t.topic_id = p.topic_id AND t.forum_id = f.forum_id AND p.forum_id = f.forum_id AND p.poster_id = u.user_id";
	if (!($result = $db->sql_query($sql)))
	{
		message_die(GENERAL_ERROR, 'Could not obtain info from admin.', '', __LINE__, __FILE__, $sql);
	}

	$bcc_list_ary = array();
	if ($row = $db->sql_fetchrow($result))
	{
                        $forum = $row['forum_name'];
                        $topic_title = $row['topic_title'];
                        $poster = ($row['poster_id'] == ANONYMOUS) ? 'ein Gast' : $row['username'];
                        $post_time = create_date($board_config['default_dateformat'], $row['post_time'], $board_config['board_timezone']);

		@set_time_limit(60);
		do
		{
			if ($board_config['board_email'] != '')
			{
				$bcc_list_ary[$board_config['board_lang']][] = $board_config['board_email'];
			}
		}
		while ($row = $db->sql_fetchrow($result));

		if (preg_match('/[c-z]:\\\.*/i', getenv('PATH')) && !$board_config['smtp_delivery'])
		{
			$ini_val = (@phpversion() >= '4.0.0') ? 'ini_get' : 'get_cfg_var';
			$board_config['smtp_delivery'] = 1;
			$board_config['smtp_host'] = @$ini_val('SMTP');
		}

		if (sizeof($bcc_list_ary))
		{
			include($phpbb_root_path . 'includes/emailer.'.$phpEx);
			$emailer = new emailer($board_config['smtp_delivery']);

			$script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path']));
			$script_name = ($script_name != '') ? $script_name . '/viewtopic.'.$phpEx : 'viewtopic.'.$phpEx;
			$server_name = trim($board_config['server_name']);
			$server_protocol = ($board_config['cookie_secure']) ? 'https://' : 'http://';
			$server_port = ($board_config['server_port'] <> 80) ? ':' . trim($board_config['server_port']) . '/' : '/';

			$emailer->from($board_config['board_email']);
			$emailer->replyto($board_config['board_email']);

			@reset($bcc_list_ary);
			while (list($user_lang, $bcc_list) = each($bcc_list_ary))
			{
				$emailer->use_template('admin_notify', $user_lang);

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

				$emailer->set_subject($lang['Topic_reply_notfication']);

				switch($mode)
				{
					case 'reply':
					                $action = 'beantwort';
					                break;
					case 'newtopic':
					                $action = 'erstellt';
					                break;
					case 'editpost':
					                $action = 'geändert';
					                break;
					case 'delete':
					                $action = 'gelöscht';
					                break;
					default:
					                break;
				}

				$emailer->assign_vars(array(
					'FORUM' => $forum,
					'POSTER' => $poster,
					'TOPIC_TITLE' => $topic_title, 
					'POST_TIME' => $post_time,
                                                            'ACTION' => $action,
					'U_TOPIC' => $server_protocol . $server_name . $server_port . $script_name . '?' . POST_POST_URL . "=$post_id#$post_id",
				));
				$emailer->send();
				$emailer->reset();
			}
		}
	}
	$db->sql_freeresult($result);
}
..versuch´s ma damit als Funktion.
Nun erstelle noch eine admin_notify.tpl, die nach /language/lang_x/email zu kopieren ist..

Code: Alles auswählen

Subject: Benachrichtigung - {TOPIC_TITLE}
Charset: iso-8859-1

Das Thema "{TOPIC_TITLE}" (Forum: {FORUM}) wurde von {POSTER} um {POST_TIME} {ACTION}.

{U_TOPIC}
Gast

Beitrag von Gast »

Danke,

das versenden funktioniert, nur die SQL-abfrage hackt hier noch.
Ich bekomme diesen Fehler:

Code: Alles auswählen

Error in posting

DEBUG MODE

SQL Error : 1064 You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ' forum_topics = forum_topics + 1 WHERE forum_id = 8' at line

UPDATE phpbb_forums SET forum_posts = forum_posts + 1, forum_last_post_id = , forum_topics = forum_topics + 1 WHERE forum_id = 8

Line : 452
File : E:\web\janaserver\html\forum\phpBB2\includes\functions_post.php
werd mal das ganze durchklabüsern
Benutzeravatar
Itac
Mitglied
Beiträge: 19
Registriert: 22.08.2003 16:09
Wohnort: Rostock
Kontaktdaten:

Beitrag von Itac »

sorry gast=Itac

bin ich mit dem Funktionsaufruf zu früh dran?
Acid
Ehrenadmin
Beiträge: 12195
Registriert: 26.04.2001 02:00
Wohnort: Berlin

Beitrag von Acid »

Itac hat geschrieben:bin ich mit dem Funktionsaufruf zu früh dran?
inwiefern?

Kannst du die Änderung bezüglich der "AdminInfo" Funktion rückgängig machen.. kommt die Fehlermeldung dann immer noch (denn eigentlich hat das mit der neuen Funktion nix zu tun)!?
Benutzeravatar
Itac
Mitglied
Beiträge: 19
Registriert: 22.08.2003 16:09
Wohnort: Rostock
Kontaktdaten:

Beitrag von Itac »

inwiefern?
das erst die Datenbank aktualiesiert werden muß, um dann auf den neuen
Artikel zuzugreifen zu können.

hab mal alles rückgängig gemacht,
jetzt kommt keine Fehlermeldung mehr.

Nur wird in der generieten e-Mail ein falscher Titel angezeigt, der Link funktioniert.

Die Funktion rufe ich aus der posting.php auf, an der Stelle:

Code: Alles auswählen

if ( $error_msg == '' )
	{
		 AdminInfo($mode, $post_data, $post_info['topic_title'], $forum_id, $topic_id, $post_id, $notify_user); //ak28102003mod

		if ( $mode != 'editpost' )
		{
			$user_id = ( $mode == 'reply' || $mode == 'newtopic' ) ? $userdata['user_id'] : $post_data['poster_id'];
			update_post_stats($mode, $post_data, $forum_id, $topic_id, $post_id, $user_id);
		}

		if ($error_msg == '' && $mode != 'poll_delete')
		{
			user_notification($mode, $post_data, $post_info['topic_title'], $forum_id, $topic_id, $post_id, $notify_user);
		}


*Test*
hmm, scheint duch die Testerei die DB durcheinandergekommen sein.
*alles lösch*

OK es funktinert! Danke!

Jetzt muß ich nur noch die Mail aussagekräftiger machen...
Benutzeravatar
Itac
Mitglied
Beiträge: 19
Registriert: 22.08.2003 16:09
Wohnort: Rostock
Kontaktdaten:

Beitrag von Itac »

zu früh gefreut entweder ist meine DB jetzt föllig durcheinander oder hmm...

ich hab mit php myAdmin alle Beiträge, und Zähler für Beiträge gelöscht.
Der erste Post hat funktioniert beim Zweiten zeigt er in der Mail
als Thema das Thema vom letzten Beitrag an, der Link ist richtig.

Gibt es einen Aufruf die kompette DB außer die Grundeinstellungen zu löchen, so als wenn ich sie installiert habe und schon Themen hochgeladen habe und Grundeinstellungen drinn hab und User drinnhab?
Benutzeravatar
Itac
Mitglied
Beiträge: 19
Registriert: 22.08.2003 16:09
Wohnort: Rostock
Kontaktdaten:

Beitrag von Itac »

nun nachdem ich alles im Adminbereich gelöscht hab und neu angelegt habe scheint es zu funktionieren. Werd mal an der Ausgabe feilen.

Ein Gruß & Danke
Benutzeravatar
Itac
Mitglied
Beiträge: 19
Registriert: 22.08.2003 16:09
Wohnort: Rostock
Kontaktdaten:

MOD: Info bei Änderungen im Forum an Admin

Beitrag von Itac »

Aufbauend auf den Beitrag von Acid ist folgender MOD entstanden:

Info bei Änderungen im Forum an Admin (admin_notification)

öffne: \includes\functions.php

füge ein (am besten am Ende vor ?>):

Code: Alles auswählen

 function AdminInfo($mode, &$post_data, &$topic_title, &$forum_id, &$topic_id, &$post_id, &$notify_user) 
{ 
   global $board_config, $lang, $db, $phpbb_root_path, $phpEx; 
   global $userdata, $user_ip;
  
   $sql = "SELECT u.user_id, u.user_level, u.user_email, u.user_lang, u.username, t.topic_id, t.topic_title, p.post_time, p.poster_id, p.post_username, f.forum_id, f.forum_name 
      FROM ". USERS_TABLE ." u, ". TOPICS_TABLE ." t, ". POSTS_TABLE ." p, ". FORUMS_TABLE ." f 
      WHERE t.topic_id = p.topic_id AND t.forum_id = f.forum_id AND p.forum_id = f.forum_id AND p.poster_id = u.user_id"; 
   if (!($result = $db->sql_query($sql))) 
   { 
      message_die(GENERAL_ERROR, 'Could not obtain info from admin.', '', __LINE__, __FILE__, $sql); 
   } 

   $bcc_list_ary = array(); 
  //Infos vom Quellposting
   if ($row = $db->sql_fetchrow($result)) 
   { 
                        $forum = $row['forum_name']; 
                        $topic_title = $row['topic_title'];  
                        $post_time = create_date($board_config['default_dateformat'], $row['post_time'], $board_config['board_timezone']);


      @set_time_limit(60); 
      do 
      { 
         if ($board_config['board_email'] != '') 
         { 
            $bcc_list_ary[$board_config['board_lang']][] = $board_config['board_email']; 
         } 
      } 
      while ($row = $db->sql_fetchrow($result)); 

      if (preg_match('/[c-z]:\\\.*/i', getenv('PATH')) && !$board_config['smtp_delivery']) 
      { 
         $ini_val = (@phpversion() >= '4.0.0') ? 'ini_get' : 'get_cfg_var'; 
         $board_config['smtp_delivery'] = 1; 
         $board_config['smtp_host'] = @$ini_val('SMTP'); 
      } 

      if (sizeof($bcc_list_ary)) 
      { 
         include($phpbb_root_path . 'includes/emailer.'.$phpEx); 
         $emailer = new emailer($board_config['smtp_delivery']); 

         $script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path'])); 
         $script_name = ($script_name != '') ? $script_name . '/viewtopic.'.$phpEx : 'viewtopic.'.$phpEx; 
         $server_name = trim($board_config['server_name']); 
         $server_protocol = ($board_config['cookie_secure']) ? 'https://' : 'http://'; 
         $server_port = ($board_config['server_port'] <> 80) ? ':' . trim($board_config['server_port']) . '/' : '/'; 

         $emailer->from($board_config['board_email']); 
         $emailer->replyto($board_config['board_email']); 

         @reset($bcc_list_ary); 
         while (list($user_lang, $bcc_list) = each($bcc_list_ary)) 
         { 
            $emailer->use_template('admin_notify', $user_lang); 

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

            $emailer->set_subject($lang['Topic_reply_notfication']); 
			$ttext  = 'das ';
            $tbetreff  = '';
            switch($mode) 
            { 
               case 'reply': 
                               $action = 'geantwortet'; 
							   $ttext  = 'auf das ';
                               $tbetreff  = 'eine Antwort auf das Thema "'.$topic_title.'"';
							   break; 
               case 'newtopic': 
                               $action = 'erstellt'; 
                               $tbetreff  = 'das Thema "'.$topic_title.'" wurde erstellt';
							   break; 
               case 'editpost': 
                               $action = 'geändert'; 
                               $tbetreff  = 'Änderung beim Thema "'.$topic_title.'"';
							   break; 
               case 'delete': 
                               $action = 'gelöscht'; 
                               $ttext  = 'im ';
							   $tbetreff  = 'im Thema "'.$topic_title.'" wurde gelöscht';
							   break; 
               default: 
                               break; 
            } 
			
			$poster = ($userdata['username'] == 'Anonymous') ? 'Ein Gast' : $userdata['username'];
			
            $emailer->assign_vars(array( 
               'FORUM' => $forum, 
               'POSTER' => $poster, 
               'TOPIC_TITLE' => $topic_title, 
               'POST_TIME' => $post_time, 
               'ACTION' => $action, 
			   'BTEXT' => $ttext,
               'BSUBJECT' => $tbetreff,
               'U_TOPIC' => $server_protocol . $server_name . $server_port . $script_name . '?' . POST_POST_URL . "=$post_id#$post_id", 
            )); 
            $emailer->send(); 
            $emailer->reset(); 
         } 
      } 
   } 
   $db->sql_freeresult($result); 
} 
speichern.

öffne: posting.php

suche:

Code: Alles auswählen


		if ( $mode == 'newtopic' || $mode == 'reply' )
		{
			$tracking_topics = ( !empty($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_t']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_t']) : array();
			$tracking_forums = ( !empty($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f']) : array();

			if ( count($tracking_topics) + count($tracking_forums) == 100 && empty($tracking_topics[$topic_id]) )
			{
				asort($tracking_topics);
				unset($tracking_topics[key($tracking_topics)]);
			}

			$tracking_topics[$topic_id] = time();

			setcookie($board_config['cookie_name'] . '_t', serialize($tracking_topics), 0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']);
		}
füge danach ein:

Code: Alles auswählen

		if( $userdata['user_level'] != ADMIN ){AdminInfo($mode, $post_data, $post_info['topic_title'], $forum_id, $topic_id, $post_id, $notify_user);};
(nur Änderungen die nicht der Admin gemacht hat übermitteln)

speichern.


erstelle:
admin_notify.tpl
in
\language\lang_english\email\
und in
\language\lang_german\email\

mit dem Inhalt:

Code: Alles auswählen

Subject: Forum elearning: {BSUBJECT}
Charset: iso-8859-1 

{POSTER} hat {BTEXT}Thema "{TOPIC_TITLE}" im Forum "{FORUM}" am {POST_TIME} {ACTION}. 

Direkter Link: {U_TOPIC} 
Dank nochmal an Acid.

Das ganze ist nicht bei großen Foren zu empfehlen, da jede
Änderung bekanntgemacht wird. Auch gibt es keine Verwaltung
im Adminbereich. Z.B: könnte mann ein Feld reinbauen worin
man Empfänger für Nachrichten eintragen kann. Aber da gab es
schon den "admin_notification" MOD -der was mir aber zu kompliziert :grin:

Ein Gruß
Antworten

Zurück zu „phpBB 2.0: Mods in Entwicklung“