Seite 1 von 3

e-Mail an Forumadmin versenden-Error

Verfasst: 28.10.2003 10:32
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ß

Verfasst: 28.10.2003 10:35
von Itac
nutze 2.0.6 er Version

Verfasst: 28.10.2003 13:47
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}

Verfasst: 28.10.2003 14:33
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

Verfasst: 28.10.2003 14:33
von Itac
sorry gast=Itac

bin ich mit dem Funktionsaufruf zu früh dran?

Verfasst: 28.10.2003 15:18
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)!?

Verfasst: 28.10.2003 16:39
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...

Verfasst: 28.10.2003 16:46
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?

Verfasst: 28.10.2003 17:09
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

MOD: Info bei Änderungen im Forum an Admin

Verfasst: 29.10.2003 11:16
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ß