[S4Y] Powerpanel "News" kommen nicht per Mail?

elmo

New Member
Hallo zusammen,

leider habe ich die Powerpanel Newsmeldung über die Wartungsarbeiten vom 23. auf den 24. Januar nicht rechtzeitig gesehen. Bekommt man die nicht per Mail zugesendet? Ich habe in meinem Postfach dazu nichts gefunden. Oder muss man das irgendwo einrichten? :confused:

Ich habe es nur im nachhinein gelesen, da mir der mrtg komisch aussah. :rolleyes:

Grüße
elmo
 
Die sind bei mir noch nie per Mail angekommen, wüsste auch nicht ob man das einrichten kann?!
 
S4Y verschickt die News (leider) nicht per email. Diskussionen hierzu gab es schon - das Fazit war damals, dass S4Y die "Wucht" an Antwortbounces nicht riskieren möchte. Diese würden entstehen durch: 1. ungültige eingetragene Adressen, 2. Adressen die auf Servern gehostet werden, die just genau weil eben eine News geschaltet wird (akuter Ausfall von Servern/Netzwerken) genau dann eben gar nicht zugestellt werden können. Alle Anwender müssten daher extern gehostete (Notfall-) Adressen eintragen.

Ich hab es für mich so gelöst, dass ein stündlicher Cronjob die Newsseite holt und mich bei Veränderung benachrichtigt.
 
Auch keine dumme Idee, Du willst doch sicher Dein Wissen der Allgemeinheit zur Verfügung stellen :P
 
hier ein "quick and dirty" Perl-Script

PHP:
... alte Version des Scripts entfernt - neue Version siehe weiter unten im Threadverlauf
 
Last edited by a moderator:
Das ist mal eine nette und prompte Antwort. leider fehlt mir libwww-mechanize-perl. Und soweit bin ich noch nicht um Module zu installieren. :( Achnee, das geht mit cpan? Damit habe ich noch nicht gearbeitet. Zudem scheint er da WWW::Mechanize nicht zu finden. Vielleicht stelle ich mich da noch zu blöd an.

Grüße
elmo
 
Last edited by a moderator:
Hallo gunnarh, ich bin nun den manuellen Weg (mit perl Makefile.PL ...) gegangen und hat auch gleich auf Anhieb funktioniert. Allerdings fehlte ein weiteres Modul. Aber nun scheint es zu laufen, er verschickt fröhlich Mails. Bleibt nur die Frage, ob ein stündlicher Cronjob nötig ist? Mir würde ein tägliches Ausführen des Scripts langen. Wohin mit den ganzen Mails? :rolleyes:

Danke.

Grüße
elmo
 
ob ein stündlicher Cronjob nötig ist? Mir würde ein tägliches Ausführen des Scripts langen. Wohin mit den ganzen Mails?

das script vergleicht ja die abgerufenen Seiten aus dem Powerpanel mit den zuletzt erhaltenen und schickt eine Mail nur bei Veränderung. Erfahrungsgemäß ändert S4Y ihr Powerpanel vielleicht 2-3 mal im Monat (Layoutänderungen resultieren bei diesem quick-and-dirty-script ja leider auch in einem Mailversand). Insofern ist es ziemlich egal ob man den Cronjob Stündlich, Täglich oder wöchentlich ausführt - mehrmals am Tag ändert sich ja selten was, somit kommt es nicht zu einer Mailflut.
 
Oh tatsächlich. Ich habe es in die Crontab eingetragen und die Mails halten sich in Grenzen. Danke. ;)

Grüße
elmo
 
Hi,

nett aufgebaut :)
Aber kann es sein, dass die Abfrage der Uptime des Hostsystems generell ausgeführt und somit bei jedem Durchlauf per Mail versendet wird?
Ich sehe da zwar eine Routine, die die Uptime ignorieren soll (sofern ich die richtig lese), nur scheinbar prüft er die trotzdem generell.

Ich habe daher jetzt erstmal noch die Variable $host eingefügt und die Zeile "check("hostsystem.php","hostsystem.php");" auf "check("hostsystem.php","hostsystem.php") if $host;" geändert.

Dann habe ich dieses Script entsprechend umgeschrieben für die Rootserver, wo dann News, Vertrags-& Serverdaten und offene Tickets geprüft werden. Auch wenn es jetzt eigentlich der falsche Thread ist passt es doch von der Thematik her :)

Code:
#!/usr/bin/perl

# Debug-Ausgabe zum Testen/Fehlersuchen ein/ausschalten
$debug = 0;

# Anmeldecredentials für das Panel
$uid='LOGIN';
$pwd='PASSWORD';

# Absenderadresse, Zieladresse der Mail
$from='ABSENDER';
$to  ='EMPFÄNGER';

# Verzeichnis, in dem die abgerufenen Vergleichsdaten aufbewahrt werden sollen
$path = "/root/infoscripts/daten";

########################################
########################################
### Don't change anything below this ###
########################################
########################################

chdir ($path);

use WWW::Mechanize;
use MIME::Lite;

check("index.php?Page=news","news");
check("index.php?page=contact_and_server","customerdata");
check("index.php?page=ticket_show&type=open","opentickets");

sub check
{ ($url, $file) = @_;

  system("cp -pf rootserver.$file.current rootserver.$file.old") if (-e "rootserver.$file.current");

  my $m = WWW::Mechanize->new( autocheck => 1, agent => "Mozilla/4.0 (compatible; MSIE 6.0; Windows)" );
  my @args = ( Authorization => "Basic " .  MIME::Base64::encode("$uid:$pwd" ) );

  $m->credentials("powerpanel.server4you.de.de", "SERVER4YOU POWERPANEL", "$uid", "$pwd");
  $m->get("https://powerpanel.server4you.de/$url", @args);
  print "Site abrufen: " . $m->response->status_line . "\n" if $debug;

  $content = $m->content;

# variable Updtime herausfiltern, z.b.  9 Tag(e) 20:15:54 Stunden

  $content =~ s/d+ Tag/x Tag/;
  $content =~ s/d+:d+:d+ Stunden/xx:xx:xx Stunden/;

  $content =~ s/(Backupserver:[^n]+n[^n]+n)([^n]+)(n)/$1---$3/m;

#print $m->content if $debug;

  open (F, ">rootserver.$file.current");
  print F $content;
  close (F);

  if (system("diff rootserver.$file.current rootserver.$file.old >/dev/null"))
  { print "Seite $file hat sich geaendert!\n" if $debug;

    $Mail = MIME::Lite->build
    ( From    => $from,
      To      => $to,
      Subject => "rootserver Powerpanel Datenaenderung: $file",
      Type    => 'text/html',
      Data    => $m->content
    ) or die "MIME::Lite->new: $!\n";

    print "sende Mail ...\n" if $debug;
    $Mail->send();
  }
  else { print "Seite $file ist gleichgeblieben!\n" if $debug; }
}


-W
 
hier ein "quick and dirty" Perl-Script

Leider zieht das Script seit einiger Zeit nur noch die index.php. Ich hab einfach mal folgende Änderung vorgenommen:

Suche nach:
Code:
$m->credentials("powerpanel.vserver.de", "vSERVER Administration", "$uid", "$pwd");

Füge danach ein:
Code:
$m->get("https://powerpanel.vserver.de/index.php", @args);

Scheint insofern zu gehen... Wieso er mir allerdings immer wieder die billingdata und die customerdata schickt, keine Ahnung... :confused:

Grüße
elmo
 
folgende Modifikation fehlt noch, damit das mit den Änderungen in der "customerdata" auch funktioniert:
PHP:
 $content =~ s/(name="checkPost" value=")(\w+)"/$1---"/m;

habe mein Script für das vServer-Panel modifiziert, die neue Version sieht so aus:

PHP:
#!/usr/bin/perl

# Debug-Ausgabe zum Testen/Fehlersuchen ein/ausschalten
$debug = 0;

# Anmeldecredentials für das Panel, Benachrichtigungsadressen
$uid='123456';
$pwd='strenggeheim';
$from='meine-adresse@meine-domain.de';
$to  ='meine-benachrichtigungsadresse@gmx.net';

# Verzeichnis, in dem die abgerufenen Vergleichsdaten aufbewahrt werden sollen
chdir ("/root/infoscripts/daten");

########################################

use WWW::Mechanize;
use MIME::Lite;

check("news.php","news");
check("basicdata.php?type=customerdata","customerdata");
check("basicdata.php?type=billingdata","billingdata");
check("basicdata.php?type=serverdata","serverdata");
check("backup.php","backup");
check("ticket.php?action=opentickets","opentickets");
check("basicdata.php?type=invoicedata","invoicedata");
check("hostsystem.php","hostsystem.php");

sub check
{ ($url, $file) = @_;

  system("cp -pf vserver.$file.current vserver.$file.old") if (-e "vserver.$file.current");

  my $m = WWW::Mechanize->new( autocheck => 1, agent => "Mozilla/4.0 (compatible; MSIE 6.0; Windows)" );
  $m->credentials("$uid", "$pwd");
  $m->add_header( Referer => "https://powerpanel.vserver.de/index.php" );
  $m->get("https://powerpanel.vserver.de/index.php", @args);
  $m->get("https://powerpanel.vserver.de/$url", @args);

  $content = $m->content;
  # variable Uptime herausfiltern, z.b.  9 Tag(e) 20:15:54 Stunden
  $content =~ s/\d+ Tag/x Tag/;
  $content =~ s/\d+:\d+:\d+ Stunden/xx:xx:xx Stunden/;
  # sonstigen bei jedem Abruf ändernden content herausfiltern
  $content =~ s/(Backupserver:[^\n]+\n[^\n]+\n)([^\n]+)(\n)/$1---$3/m;
  $content =~ s/(name="checkPost" value=")(\w+)"/$1---"/m;

  #print $m->content if $debug;
  open (F, ">vserver.$file.current");
  print F $content;
  close (F);

  if (system("diff vserver.$file.current vserver.$file.old >/dev/null"))
   { print "vServer $file  hat sich geaendert!\n" if $debug;

     $Mail = MIME::Lite->build
        ( From    => $from,
          To      => $to,
#         Cc      => $cc,
#         Reply-To => $replyto,
#         Return-path => $returnpath,
          Subject => "vServer Powerpanel Datenaenderung: $file",
          Type    => 'text/html',
          Data    => $m->content
        ) or die "MIME::Lite->new: $!\n";

    print "sende Mail ...\n" if $debug;
    $Mail->send();
   }
  else { print "vServer $file ist gleichgeblieben!\n" if $debug; }
}

Da ich nur einen vServer aber keinen Rootserver habe, kann ich die Änderungen von wStuermer nicht testen und habe sie daher auch nicht hier eingearbeitet. Wie gesagt: diese Variante funktioniert bei meinem S4Y vServer PowerPanel nun wieder wie gewünscht (also Mailversand wenn sich etwas signifikantes (was nicht in den ignore-patterns weggefiltert wird) geändert hat).
 
Last edited by a moderator:
Tjo, mit Umstellung des Powerpanels fällt das Script wohl flach auf die Nase. Und ein Login mittels diesem zu verwirklichen ist sicher nun nicht mehr möglich, da es sich hierbei nicht mehr um ein .htaccess Login handelt. :(
 
Ich bin kein Kunde von S4Y mehr - habe daher auch keinen Zugang zum Powerpanel.

Soweit ich auf der Einstiegsseite sehe loggt man sich nun mit einem Eingabeformular an. Für Perls WWW:Mechanize ist das kein Problem. Für die Entwicklung des nötigen Scripts empfehle ich Firefox mit dem Firebug Addon - damit lassen sich die nötigen POST Variablen auch bei SSL gesicherten Webseiten wunderbar analysieren.
 
Back
Top