Thread Mail::Sendmail - unterdrücken der Rückmeldung... (5 answers)
Opened by jan99 at 2015-03-06 10:48

jan99
 2015-03-06 18:58
#180040 #180040
User since
2008-09-18
439 Artikel
BenutzerIn
[default_avatar]
Moin !

also in einer Windows-Aufgabe soll ein Scipt (Perl) ausgeführt werden was über

Code (perl): (dl )
perl meine-funkion.pl


in einer Batch gestartet werden soll. Das Perl-Skript selber prüft ob ein Dienstläuft und verschickt dann, in Abhängigkeit des Aufrufs eine eMail.

Damit sind die beiden Ticket (Dir bekannt) zusammengefaßt.

Deshalb folgt jetzt einmal der gesamte Code damit es vielleicht besser zu verstehen ist.

Gruß Jan

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/usr/bin/perl
use strict;
use warnings;

use Getopt::Long;
use Win32::Service;
use Mail::Sendmail;

# main-parameeters
my %config=(
  "logmail"=>0,                                    # 1... immer eine LogMail verschicken
  "service"=>'',                                   # Name des Service; wird keiner angegeben, dann Fehlermail
  "title_err"=>'name of service',                  # Betrefftext für die FehlerMail
  "title_log"=>'name of service',                  # Betrefftext für die LogMail
  "message"=>'message in error-mail',              # Text für die Fehlerinfo-Email
  "email_to"=>'',                                  # es kann auch eine Liste von Empfängern angegeben werden, Trennzeichen ";"
  "email_from"=>'gis-hotline@ebhl.de',             # von wem wird die eMail versandt
  "email_pwd"=>'GH2014wiki',                       # Anmeldepasswort am Exchange
  "email_required"=>1,                             # eine Authorisierung erforderliche?
  "email_smtp"=>'ma22-ex-002.local.ebhl.de',       # Exchange-Server
  
);

GetOptions
( 
  "help|h"             => sub{ Usage(); },
  "logmail"            => sub{ $config{logmail}=1; },
  "service=s"          => \$config{service},
  "terr=s"             => \$config{title_err},
  "tlog=s"             => \$config{title_log},
  "message=s"          => \$config{message},
  "to=s"               => \$config{email_to},
) or Usage();

my $hostname = '127.0.0.1'; # this means local host.
my $name_of_this_machine = (gethostbyname ("localhost"))[0];
my $report_text = '';
my $report_subject = $name_of_this_machine." - Service: ".$config{service}." - Statusreport";
my $report_subject_error = "FEHLER - ".$name_of_this_machine." - Service: ".$config{service};

print "Rechnername:        ".$name_of_this_machine."\n";

if ($config{email_to} !~ /^([a-zA-Z0-9][a-zA-Z_0-9-\.]*)(\@)([a-zA-Z0-9][a-zA-Z_0-9-\.]*[a-zA-Z0-9])(\.)([a-zA-Z0-9]*)$/) {
 print "** Es wurde keine gueltige Empfaenger-eMail-Adresse angegeben!!**\n\n";
 $report_subject = "** ".$report_subject;
 $report_text .= "\n\nEs wurde keine gueltige Zieladresse fuer die eMail angegeben!!\n\n";
 # bevor es keine Adresse gibt, dann an mich selber schicken - die groesste Chance jemanden zu erreichen
 $config{email_to} = $config{email_from};
 # auf jeden Fall eine eMail verschicken.
 $config{logmail} = 1;
}

my %info;

# wenn kein Service-Name angegeben, dann wir automatisch eine Mail an den Admin versandt!!
if ($config{service} eq "")
 {
   print "** Es wurde kein Service angegeben!!**\n\n";
   $report_text .= "\n\n\nFataler Fehler in Prueffunktion - es wurde kein Service-Name angegeben !!\n\n";
   # Hervorheben der Überschrift
   $report_subject = "** ".$report_subject;
   # Zwangsemail wird verschickt
   $config{logmail} = 1;
 } else {

        print "Service zu pruefen: ".$config{service}."\n";

        my %state_code =
        (
                1 => 'not running',
                2 => 'start pending',
                3 => 'stop pending',
                4 => 'running',
                5 => 'resume pending', #wieder anhängig
                6 => 'pause pending', #pause anhängig
                7 => 'paused'
        );
        
        Win32::Service::GetStatus($hostname,$config{service},\%info);
        
        $report_text .= "Service: ".$config{service}."\n";
        $report_text .= "Hostname: ".$hostname."\n";
        $report_text .= "Status: ".$info{'CurrentState'}." -> ".$state_code{$info{'CurrentState'}}."\n";

        #print "\tState:   ", $state_code{$info{'CurrentState'}} || $info{'CurrentState'} , "\n";
        # nachfolgende Daten werden in die eMail mit aufgenommen !
        print "\tStateNo: ".$info{'CurrentState'}."\n";
        $report_text .= "PID: $info{'ProcessId'}\n" if ($info{'ProcessId'});
        $report_text .= "Exited with code $info{'Win32ExitCode'}.\n" if ($info{'Win32ExitCode'});
        $report_text .= "Exited with error; code $info{'ServiceSpecificExitCode'} was logged.\n" if ($info{'ServiceSpecificExitCode'});
        $report_text .= "Approx. $info{'WaitHint'} milliseconds until complete.\n" if ($info{'WaitHint'});
        $report_text .= "Checkpoint: $info{'CheckPoint'}\n" if ($info{'CheckPoint'});
  } # endif-wurde ein Service-Name übergeben?
        

# wenn immer eine eMail an den Admin verschickt werden soll
SendReportMail(\%config, $report_text, $report_subject_error) if ($info{'CurrentState'} != 4);

# wenn immer eine eMail an den Admin verschickt werden soll
SendReportMail(\%config, $report_text, $report_subject) if ($config{logmail} ==1);

sub Usage
{
        my( $message ) = @_;

        if( $message )
        {
                print "$message\n";
        }

        print "******hier muss noch dokumentiert werden ******\n";
        print "\t-help this help\n";
        print "....\n";

        exit 0;                                 # beenden
}

sub SendReportMail{
   my %conf = %{shift()};
   my $meldung = shift || "Es wurde keine Meldung bereitgestellt!";
   my $betriff = shift || "Meldung vom Monitoring-System!";
   
 my %mail = ( To      => $conf{email_to},
            From      => $conf{email_from},
            Message   => $report_text,
                        Subject   => $report_subject,
           );
  $mail{auth} = {user=>$conf{email_from}, password=>$conf{email_pwd}, required=>$conf{email_required} };

  $mail{Smtp} = $conf{email_smtp}; 
 
  sendmail(%mail) or die $Mail::Sendmail::error;
  print "OK. Log says:\n", $Mail::Sendmail::log;
   }#end-SendReportMail
   
perl-Greenhorn - Win7 64bit / strawberry (ehem. activeperl) - www.OpenStreetMap.de

View full thread Mail::Sendmail - unterdrücken der Rückmeldung...