Private Nachrichten an mehrere User gleichzeitig senden

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Private Nachrichten an mehrere User gleichzeitig senden

Beitrag von oxpus »

Dieses Snippet erlaubt es, mehrere Usernamen als Empfänger von PN's anzugeben, an die diese Nachricht dann auch verschickt wird.
Die Usernamen sind dabei entweder auszuwählen oder durch Semikolon zu trennen.

Code: Alles auswählen

#
#-----[ OPEN ]-----
#
privmsg.php

#
#-----[ FIND ]-----
#
		if ( !empty($HTTP_POST_VARS['username']) )
		{
			$to_username = phpbb_clean_username($HTTP_POST_VARS['username']);

			$sql = "SELECT user_id, user_notify_pm, user_email, user_lang, user_active 
				FROM " . USERS_TABLE . "
				WHERE username = '" . str_replace("\'", "''", $to_username) . "'
					AND user_id <> " . ANONYMOUS;
			if ( !($result = $db->sql_query($sql)) )
			{
				$error = TRUE;
				$error_msg = $lang['No_such_user'];
			}

			if (!($to_userdata = $db->sql_fetchrow($result)))
			{
				$error = TRUE;
				$error_msg = $lang['No_such_user'];
			}
		}

#
#-----[ REPLACE WITH ]-----
#
		if ( !empty($HTTP_POST_VARS['username']) )
		{
			$to_username_array = explode (";", $HTTP_POST_VARS['username']);
			$to_name_array = array();
			foreach ($to_username_array as $name)
			{
				$to_name = "'".phpbb_clean_username($name)."'";
				$to_usernames .= ($to_usernames != '') ? ', '.$to_name : $to_name;
				$to_name_array[] = $to_name;
			}

			$sql = "SELECT username, user_id, user_notify_pm, user_email, user_lang, user_active
				FROM " . USERS_TABLE . "
				WHERE username IN ($to_usernames)
					AND user_id <> " . ANONYMOUS;
			if( !($result2 = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Could not obtain users PM information', '', __LINE__, __FILE__, $sql);
			}
			if (!($to_users = $db->sql_fetchrowset($result2)))
			{
				$error = TRUE;
				$error_msg = $lang['No_such_user'];
			}

			if (!$error)
			{
				$to_user_names = '';
				for ($n = 0; $n < count($to_users); $n++)
				{
					$to_user_names .= ($to_user_names != '') ? ';'.$to_users[$n]['username'] : $to_users[$n]['username'];
				}

				$user_not_found = '';
				for ($n = 0; $n < count($to_name_array); $n++)
				{
					$to_name = str_replace("'", '', $to_name_array[$n]);
					if (strpos($to_user_names, $to_name) === FALSE)
					{
						$user_not_found .= ($user_not_found != '') ? ', '.$to_name : $to_name;
					}
				}
				if ($user_not_found != '')
				{
					$error = TRUE; 
					$error_msg .= $lang['No_such_user'].": ".$user_not_found;
				}
			}
		}

#
#-----[ FIND ]-----
#
	if ( $submit && !$error )
	{
		//
		// Has admin prevented user from sending PM's?
		//
		if ( !$userdata['user_allow_pm'] )
		{
			$message = $lang['Cannot_send_privmsg'];
			message_die(GENERAL_MESSAGE, $message);
		}

#
#-----[ AFTER, ADD ]-----
#
		include($phpbb_root_path . 'includes/emailer.'.$phpEx);

		foreach($to_users as $to_userdata)
		{

#
#-----[ FIND ]-----
#
				include($phpbb_root_path . 'includes/emailer.'.$phpEx);

#
#-----[ REPLACE WITH ]-----
#
//				include($phpbb_root_path . 'includes/emailer.'.$phpEx);

#
#-----[ FIND ]-----
#
				$emailer->send();
				$emailer->reset();
			}
		}

#
#-----[ AFTER, ADD ]-----
#
		}


#
#-----[ SAVE/CLOSE ALL FILES ]-----
#
# EoM
-- Code angepasst für bessere Userprüfung --
Zuletzt geändert von oxpus am Di 15.Nov, 2005 23:39, insgesamt 2-mal geändert.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
JaneDoe
Beiträge: 230
Registriert: Sa 16.Jul, 2005 12:18

Beitrag von JaneDoe »

Hallo,
hab das grad mal auf meinem Testforum eingebaut.

Wenn ich die Adressaten so Testuser;testuser2 eintrage
kommt die Meldung : Es existiert kein Benutzer mit diesem Namen. 'Testuser

Problem könnte sein, testuser2 fängt mit einem Kleinbuchstaben an. Nehm ich einen Namen mit Grossbuchstaben geht es.

Und wie geht das mit dem Auswählen von mehreren Usernamen?

//Nachtrag: so ein Problem hatte Niels wohl auch:
http://mods.db9.dk/viewtopic.php?t=6716#25182

grüsse
Zuletzt geändert von JaneDoe am Di 15.Nov, 2005 03:28, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Hm, damit hatte ich bislang keine Probleme.
Werde ich mal nachprüfen...

EDIT
Bei mir ist es genau so eingebaut und ich habe keine Fehler.
Mal schauen, wie das in einem neuen Forum funktioniert...
Zuletzt geändert von oxpus am Di 15.Nov, 2005 08:42, insgesamt 1-mal geändert.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
JaneDoe
Beiträge: 230
Registriert: Sa 16.Jul, 2005 12:18

Beitrag von JaneDoe »

Hab nochmal mit meiner Userdatenbank rumprobiert.

Es liegt nicht am kleinbuchstaben, manche Usernamen funktionieren nicht, wenn
ich sie in der Liste habe.

Es funktioniert nur dann, wenn ich hinter dem letzten User noch ein

; habe

Beispiele:
Eumel;Elfe;Testuser;floh
'Testuser falsch

Eumel;Elfe;Caro;floh
geht

floh;Pmtest3;Pmtest1
'Pmtest1 falsch

floh;Pmtest3;pmtest2
'Pmtest3 falsch

aber
floh;Pmtest3;pmtest2;
ist ok

bekomme allerdings in die "unverträglichen" Usernamen kein System, weil sie eben nicht immer
unverträglich sind.


^1
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

So, habe den Code nun nochmal aktualisiert. Ersetze den vorherigen Code einfach mit dem neuen, dann sollte es besser klappen.
Ich habe jedenfalls keine weiteren Fehler damit feststellen können und umgehe hier jegliche Sortierung oder vorausgesetzte parallele Datendarstellung wie im ursprünglichen Code verankert war.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
JaneDoe
Beiträge: 230
Registriert: Sa 16.Jul, 2005 12:18

Beitrag von JaneDoe »

jo, Danke, das klappt jetzt bei den Usern, bei denen vorher die Fehlermeldung kam. :)
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Na denn bin ich ja zufrieden.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

Also ein, wie ich finde, sehr gutes SNIPPET und scheint wirklich gut zu funktionieren, einzig eine Frage hätte ich dabei zu deinem Satz: Die Usernamen sind dabei entweder auszuwählen oder durch Semikolon zu trennen.....

Wenn ich einen User auswähle, habe ich ja immer nur einen...wie würde es da möglich sein, mehrere auszuwählen? Ich habe ja das Standard-PopUp-Fenster für diese Option und wenn ich da einen auswähle, löscht mir das jeglichen anderen User der vielleicht schon im "An"-Feld eingetragen ist...

So wie ich es sehe, könnte ich also nur über ; und manuelles eintippen mehrere Benutzer nehmen...oder gibt's da noch ein anderes SNIPPET?
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

...und direkt ne Frage...beim subject hab ich ja im Orignalen phpBB eine Begrenzung auf 60 Zeichen....in der tpl zum Benutzernamen sinds bei mir maxlength=25....ist das irgendwo in der DB festgesetzt oder kann ich da einfach 255 draus machen...sonst macht das SNIPPET ja irgendwie keinen Sinn....
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Oh, ist mir nicht aufgefallen, daß das bei mir anders ist...
Hier mal die Datei, mit der es geht:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

...danke für das Script :-) jetzt machts Sinn...bis auf <!-- BEGIN switch_no_name -->...den Sch... ich bei mir nicht drin zu haben...aber ich denke, ich kann ihn einfach weglassen...bei mir passiert bei nicht eingegebenem Namen halt einfach nur nüx...

EDIT: Und mal nur zur Sicherheit...es ist korrekt, das 2 Mal der gleiche Name abgefangen wird und nur einmal versendet wird, oder?
Zuletzt geändert von schmidtedv am Sa 19.Nov, 2005 19:05, insgesamt 1-mal geändert.
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Die User werden ausgelesen, aber nur einmalig. Daher erhält jeder User nur eine PN, auch wenn er mehrfach ausgewählt wurde.
Zumindest bei mir...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

danke, macht ja auch wenig sinn, sich aus versehen selber 50 mal ne PN zu schicken....und ist sicherer vor/für "idioten"

noch kurz ein kommentar zu der tpl...kann ich da die zeichen auf 255 setzen oder gibt's da im Originalen phpBB ne Begrenzung, die ich erst aushebeln muss?
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Nicht daß ich wüsste...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

...türili....nun doch ein kleines Problem...ich hatte privmsg.php schon soweit, das der E-Mail jeder einzelne Benutzername als "Hallo {USERNAME}" übergeben wurde, was nun nicht mehr geht (variable $to_username)...ich hab's mal mit $to_name versucht aber da nimmt er nur den letzten Namen für alle...eine Idee parat oder soll ich das "Hallo..." einfach vergessen?
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Wenn dann so:

Code: Alles auswählen

							'USERNAME' => stripslashes($to_userdata['username']),
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

Danke, das scheint zu funktionieren :-)
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

Hab' mir jetzt mal die mass_email.php angeschaut...da hätte ich nun folgendes (username in der abfrage schon einmal hinzugefügt...aber ohne erfolg):

Code: Alles auswählen

case -10: 
         $sql = "SELECT user_email, username FROM " . USERS_TABLE . " WHERE user_lastvisit <= " . (time() - (7*30*24*60*60)); 
         break; 
      default: 
         $sql = "SELECT u.user_email, u.username FROM " . USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug WHERE ug.group_id = $group_id AND ug.user_pending <> " . TRUE . " AND u.user_id = ug.user_id"; 
         break; 

Code: Alles auswählen

if ( $row = $db->sql_fetchrow($result) )
	{
		$bcc_list = array();
		do
		{
			$bcc_list[] = $row['user_email'];
		}
		while ( $row = $db->sql_fetchrow($result) );

		$db->sql_freeresult($result);

Code: Alles auswählen

'ADMINISTRATOR' => htmlspecialchars($userdata['username']),
			'USERNAME' => stripslashes($row['username']),
Hierzu auch eine Idee? :-)

Gleiches in der mass_pm:

Code: Alles auswählen

  case -10: 
         $sql = "SELECT user_id, username, user_notify_pm, user_email, user_lang, user_active FROM " . USERS_TABLE . " WHERE user_lastvisit <= " . (time() - (7*30*24*60*60)); 
         break; 
      default: 
         $sql = "SELECT u.user_id, u.username, u.user_notify_pm, u.user_email, u.user_lang, u.user_active FROM " . USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug WHERE ug.group_id = $group_id AND ug.user_pending <> " . TRUE . " AND u.user_id = ug.user_id"; 
         break; 

Code: Alles auswählen

else
	{
		$bcc_list = array();
		while( $to_userdata = $db->sql_fetchrow($result) )
		{

Code: Alles auswählen

$emailer->assign_vars(array(
			'ADMINISTRATOR' => htmlspecialchars($userdata['username']),
			'PM_USERNAME' => stripslashes($to_userdata['username']),
Hier kommt leider bisher auch nur Hallo "", an...
Zuletzt geändert von schmidtedv am Mo 21.Nov, 2005 09:37, insgesamt 1-mal geändert.
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Hast Du denn auch in der Email-TPL {PM_USERNAME} eingesetzt?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

ja sischer....
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

...ich würd mir mal erlauben, die 2 Dateien anzuhängen...fällt dir, sofern Zeit, vielleicht direkt auf, was falsch ist, oder ob's so eh net geht mit dem "Username"...

[ Attachment gelöscht am Di 22.Nov, 2005 17:40 von oxpus ]
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

So vielleicht...

[ Attachment gelöscht am Di 22.Nov, 2005 17:40 von oxpus ]
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

jain...hier kriegt der Anonymous und der Admin ne Mail im mass_email...und im mass_pm klappt scheinbar zwar der Username, aber dafür kriegt auch der Admin die Mails an die Benutzer...verzwickt...btw, ich hab ja im mass_pm für case 1 die Anonymous-Ausnahme eingesetzt...bzw. auch in der mass_email (noch user_id mit in die case-zeile nachträglich eingefügt) ...da ich bei z.B. NICHT aktive Benutzer AUCH ne Email kriege, nehme ich an, das hier der Anonymous wieder ne Mail erhält...kann man da nicht ne generelle user_id > -1 Funktion einbauen...ich hab's net hinbekommen, bzw. hat nicht funktioniert, wie ich's erwartete...

Aber wichtiger wäre mir, das mit dem Username richtig hinzubekommen :-))
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

LOL
Ja, die Emailempfänger sind ja auch als BCC eingestellt und der Admin sieht dann, an wen alles eine Email ging. So als Kontrolle eben.

Und für das Ausklammern des Gast-Accounts und inaktiver User füge in die Abfrage dieses als Bedingung ein:

Code: Alles auswählen

AND user_id <> " . ANONYMOUS . "
AND user_active = " . TRUE . "
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

hm, ich schau's mir nochmal an, aber ich glaube, so wie es läuft bekommt der admin in der mass_pm ALLE Mails die an die User gehen zusätzlich....und in der mass_email NUR der Admin und der titulierte User "ANONYMOUS" (wenn auch die Mail adressen stimmen...heißen nur alle ANONYMOUS)

und zum ANONYMOUS (bei mir ja mittels user_id > -1 gelöst...kannst Du mir mal mit deiner Lösung die "Case's" hier als Beispiel einhängen, wie es dann aussähe?
Zuletzt geändert von schmidtedv am Di 22.Nov, 2005 16:21, insgesamt 1-mal geändert.
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Antworten