MyBB.de Forum

Normale Version: PN oder eMail wenn heute Geburtstag
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hi

ich würd gern eine PN oder eMail an alle User schicken ausser an den der heute Geurtstag hat. Ungefähr in der Art:
PHP-Code:
if ($geburtstag == $heute) {
  
$query $db->query("SELECT uid, email FROM ".TABLE_PREFIX."users");
  while(
$usernamen $db->fetch_array($query)) {
    if (
$usernamen['uid'] != $bdayuser['uid']) {
      
mail($usernamen['email'], "Geburtstagserinnerung"$bdayuser['username']." hat heute ($heute) Geburtstag.\nGruß Der Admin\n\nLink: ".$mybb->settings['homeurl'], "From: ".$mybb->settings['adminemail']);  
    }
  }

Aber ich kann das nicht offline testen und es dauert noch ne Weile bis bei mir jemand Geburtstag hat. Deshalb wollte ich fragen ob das so funktionieren würde oder ob es besser (leichter) mit PN's geht.
Hallo Frankrieger,

Vom Code her ist es so weit richtig. Es sollte also funktionieren.

Mfg Garlant
Ein weiteres Problem ist dass ich den Code ja nicht einfach in die index.php einbauen kann, da ja sonst jedesmal wenn sie aufgerufen wird eine E-Mail an alle abgeschickt wird.
Löse ich das besser mit einer eigenen Datei oder mit einer Art "gesendet"-Variable? Und wenn ich eine extra Datei verwende wie und wo muss die aufgerufen werden und wie binde ich da die Datenbank ein? Wenn ich eine Variabel verwende wo speichere ich die und ich bräuchte dann für jeden User und jedes Jahr eine eigene Variable? Oder gibts ne bessere Methode?

Wie sähe der Code zum verschicken einer PN aus (hab mich nämlich noch nicht entschieden ob es eine PN oder E-Mail werden soll)?
Aus diesem Forum werden auch Geburtstagsmails verschickt. Ich habe das über ein externes Skript gelöst, das einmal täglich per Cronjob aufgerufen wird. Der Code:
PHP-Code:
## Geburtstagsmail verschicken ##

// Aktuelles Datum ermitteln
$tag  date("j");
$month date("n");
$datum "".$tag."-".$month."";

$num_birthdays mysql_num_rows(mysql_query("SELECT username, email, birthday FROM mybb_forum_users WHERE birthday LIKE '$datum-%'"$db1));

if (
$num_birthdays 0) {
    
$query mysql_query("SELECT username, email, birthday FROM mybb_forum_users WHERE birthday LIKE '$datum-%'"$db1);

        while(
$bdayuser mysql_fetch_array($query)) {
            
$bmail mail("".$bdayuser['email']."",
"Herzlichen Glückwunsch zum Geburtstag",
"Hallo ".$bdayuser['username'].",\n\ndas Team von MyBBoard.de wünscht alles Gute zum Geburtstag!\n\nHerzliche Grüße,\nMyBBoard.de-Team\nhttps://www.mybb.de""From: MyBBoard.de <info@mybboard.de>");
       }
    
    if (
$bmail) {
       echo 
"<div class=\"yes\">Geburtstagsmail(s) verschickt!</div><br />";
    } else {
       echo 
"<div class=\"no\">Geburtstagsmail(s) nicht verschickt!</div><br />";
    }

Ok der Code is ja relativ ähnlich. Allerdings weiß ich nicht was ein Cronjob ist und wie man ihn ausführt.
Kann man das ganze auch mit einer PN machen?

Für was sind die letzten Zeilen des Codes?
PHP-Code:
if ($bmail) {
       echo 
"<div class=\"yes\">Geburtstagsmail(s) verschickt!</div><br />";
    } else {
       echo 
"<div class=\"no\">Geburtstagsmail(s) nicht verschickt!</div><br />";
    }

Klar wenn die Mail abgeschickt wurde wird der Code erzeugt. Aber wofür?
Michael schrieb:Aus diesem Forum werden auch Geburtstagsmails verschickt.

Seit wann das denn? Ich hab´ keine bekommen Sad

frankrieger schrieb:Ok der Code is ja relativ ähnlich. Allerdings weiß ich nicht was ein Cronjob ist und wie man ihn ausführt.
Ein Cronjob ruft eine Datei zu vorgegebenen Zeitpunkten auf. Hast du keine Cronjobs bei deinem Hoster, kannst du auch einen Dienst wie www.cronjob.de in Anspruch nehmen.
frankrieger schrieb:Kann man das ganze auch mit einer PN machen?
Ja, das geht auch. Dazu musst du einen entsprechenden Eintrag in der Datenbanktabelle privatemessages vornehmen. Guck dir einfach mal ein Plugin an, das das auch macht (z.B. PN nach Registrierung).
frankrieger schrieb:Für was sind die letzten Zeilen des Codes?
Es wird nur ausgegeben, ob die Mails verschickt wurden.
en-gedi schrieb:Seit wann das denn? Ich hab´ keine bekommen
Schon länger, ich werde mal dabei sehen.
OK das mit dem Cronjob hab ich glaub ich verstanden, da wird eine Datei zu einem bestimmten Zeitpunkt ausgeführt.
Wie kann ich in der Datei die Funktionen von Mybb nutzen? Also z.B. die Funktionen zum Datenbankzugriff?

Bei den letzten Zeilen ist mir noch nicht ganz klar wo das überhaupt dann angezeigt wird. Weil wenn ich die Datei manuell aufrufen würde würden die Mails ja noch mal losgeschickt oder?
Um Zugriff auf die Funktionen des MyBB zu bekommen muss du nur die Datei global.php per require in dein Skript einbauen.

Bei mir ist es so, dass nach Aufrufen des Skripts durch den Cronjob eine E-Mail mit der Ausgabe des Skripts an mich verschickt wird. So kann ich sehen, ob alles ausgeführt wurde. Ob das dein Hoster auch macht weiß ich nicht, über z.B. www.cronjob.de ist das meines Wissens nach nicht möglich.
OK ich hab jetzt das Skript fertig und wenn ich es "von Hand" ausführe klappt auch alles wunderbar.
Wenn es aber von cronjob.de ausgeführt wird passiert gar nix. Da ich keine Fehlermeldungen bekomme und ich danach ein einfaches skript versucht hab (hat funktioniert) schätze ich dass es vielleicht an dem require liegen könnte...
PHP-Code:
<?php        
        
require('global.php');
                
        
$bdaytime mktime(000date("n"), date("j"), date("Y"));
        
$bdaydate mydate("j-n"$bdaytime""0);
        
$year mydate("Y"$bdaytime""0);
        
$query $db->query("SELECT uid, username, birthday FROM ".TABLE_PREFIX."users WHERE birthday LIKE '$bdaydate-%'");                
        while(
$bdayuser $db->fetch_array($query)) {
          
$query2 $db->query("SELECT fid4 FROM ".TABLE_PREFIX."userfields WHERE ufid LIKE ".$bdayuser['uid']);
          
$bdayname $db->fetch_array($query2);
            
          
$bday explode("-"$bdayuser['birthday']);
          
          
$bdaydatum $bday['0'].".".$bday['1'].".";
        
          
$fertig "E-Mail-Text";                  
                      
            
$query3 $db->query("SELECT uid, username, email FROM ".TABLE_PREFIX."users");
            while(
$usernamen $db->fetch_array($query3)) {
              
$bmail "";
              
$bcmail "";
            if (
$usernamen['uid'] != $bdayuser['uid']) {
              
$bmail mail($usernamen['username']." <".$usernamen['email'].">""Betreff""E-Mail-Text""From: E-Mail-Adresse");                
            }
            else {
              
$bcmail mail($bdayname['fid4']." <".$usernamen['email'].">""Herzlichen Glückwunsch zum Geburtstag""Hallo ".$usernamen['username']."\n\nAlles Gute""From: E-Mail-Adresse");
            }
            if (
$bmail) {
              
$fertig .= "<p class=MsoNormal><font color=green><span style='font-size:\n10.0pt;font-family:Arial;color:green'>E-Mail an ".$usernamen['username']." verschickt.<o:p></o:p></span></font><br/></p>\n";
            }
            elseif (
$bcmail){
              
$fertig .= "<p class=MsoNormal><font color=green><span style='font-size:\n10.0pt;font-family:Arial;color:green'>Geburtstags-E-Mail an ".$usernamen['username']." verschickt.<o:p></o:p></span></font><br/></p>\n";
            }
            else {
              
$fertig .= "<p class=MsoNormal><font color=red><span style='font-size:\n10.0pt;font-family:Arial;color:red'>E-Mail-Versand an ".$usernamen['username']." fehlgeschlagen.<br/>\n->".$usernamen['email']."<o:p></o:p></span></font><br/></p>\n";
            }
          }
          
          
mail ("E-Mail-Adresse""Geburtstagsmails"$fertig'From: E-Mail-Adresse'."\r\n");
        }
?>

[edit] Ich hab übrigens meine Geburtstags-E-Mail von MyBB erhalten. Danke.
Seiten: 1 2