Zum Hauptinhalt springen

Ihre Anwendung hat gerade einen kritischen Zustand festgestellt, Sie können eine Nachricht in ein Anwendungsprotokoll oder sogar in das syserr_log schreiben, aber wie benachrichtigen Sie jetzt jemanden, dass die Anwendung Aufmerksamkeit benötigt? Die offensichtliche Antwort ist, eine E-Mail oder SMS-Nachricht an jemanden oder vielleicht mehrere Personen zu senden, aber OpenVOS hat keine eingebaute Möglichkeit, dies zu tun, oder doch?

Die gnu_library enthält den Perl-Befehl und eine große Anzahl von Perl-Modulen (pm-Dateien, nicht zu verwechseln mit Programm-Modulen). Eines dieser Module ist SMTP.pm. Laut der Dokumentation "implementiert es eine Client-Schnittstelle zum SMTP- und ESMTP-Protokoll, die es einer Perl5-Anwendung ermöglicht, mit SMTP-Servern zu kommunizieren".

Ich habe das folgende Perl-Skript geschrieben, das dieses Modul verwendet. Wenn Sie das Skript ohne Argumente aufrufen, erhalten Sie die folgende Meldung

perl smtp.pl

Verwendung:
   perl smtp.pl -hub MAILHUB -from SENDER@DOMAIN -subject SUBJECT
                -nachricht MESSAGE [-nachricht MESSAGE]*
                -an RECIPIENT@DOMAIN [-an RECIPIENT@DOMAIN]*
                [-verbose]

Erforderliche Argumente sind der SMTP-Server alias mailhub (-h), der Absender in Form einer E-Mail-Adresse (-f), ein Betreff (-s) und mindestens eine Nachrichtenzeile (-m) sowie der Empfänger (-t). Wenn der Text des Betreffs oder der Nachrichtenzeilen Leerzeichen enthält, muss der Text in Anführungszeichen gesetzt werden. Das -v ist eine optionale Debugging-Hilfe und gibt an, dass alle Argumente und die Kommunikation mit dem SMTP-Server angezeigt werden sollen.

Wenn ich zum Beispiel eine E-Mail an das mit meinem Telefon verbundene Konto senden möchte, könnte ich Folgendes ausführen

perl smtp.pl -h mailhub.stratus.com -f noah.davids@stratus.com -s 'test 1' -m 'n
+Netzwerk stürzt ab Aufruf in' -m NOW!! -an XXXXXX@YYYYY.com

Wie Sie sehen, können Sie die Argumente bis auf die Anfangsbuchstaben abkürzen, und leider können Sie das E-Mail-Konto meines Telefons nicht sehen. Die Mail sah aus wie

Von: Noah Davids
Test 1
Oct 28, 2010 12:42 PM

Das Netzwerk stürzt ab, rufen Sie an
JETZT!

Das Senden einer Textnachricht ist genau dasselbe wie das Senden einer E-Mail, aber die Adresse "an" lautet phonenumber@phonecompany. Die Telefonnummer ist natürlich die Telefonnummer des Telefons. Die Domäne phonecompany ist je nach Telefongesellschaft unterschiedlich.

Zum Beispiel

perl smtp.pl -h mailhub.stratus.com -f noah.davids@stratus.com -s 'test 2' -m 'n
+Netzwerk stürzt ab, rufen Sie an' -m NOW!! -an 5555555555@phonecompany

Sie werden feststellen, dass die Leitungen miteinander verbunden sind, und Sie können auch meine Telefonnummer oder meinen Dienstanbieter nicht sehen.

Thema:Test 2
 Das Netz stürzt ab, rufen Sie JETZT an!

Ich habe die Einträge, aus denen die folgende Liste besteht, hier und hier gefunden. Ich habe Sprint und Verizon getestet, mit den anderen sind Sie auf sich allein gestellt.

Alltel message.alltel.com
AT&T txt.att.net
AT&T MMS MMS.att.net
Cingular cingularme.com
Metro PCS MyMetroPcs.de
Nextel messaging.nextel.com
Powertel ptel.net
Sprint messaging.sprintpcs.com
SunCom tms.suncom.com
T-Mobile tmomail.net
US Cellular email.uscc.net
Verizon vtext.de
Jungfrau-Mobilfunk vmobl.de

Wenn Sie die gnu_library nicht installiert haben, gibt es einen SMTP-Client auf dem Server ftp.stratus.com, den Sie hier als Paket herunterladen können. Das Paket enthält den Quellcode und auch Programmmodule für alle Hardwaretypen und TCP-Stacks.

send_smtp_mail.pm -form

-------------------------------- send_smtp_mail ------------------------------
 -smtp_server:
 -to:
 -cc:
 -bcc:
 -from:
 -reply_to:
 -return_receipt_to:
 -subject:
 nachricht_1:
 nachricht_2:
 Nachricht_3:
 nachricht_4:
 Nachricht_5:
 message_6:
 -send_file:
 -smtp_port: smtp
 -wiederholte_Zeiten:
 -user_name:
 -passwort:
 -steuerung:
 -domain:
 -Wichtigkeit: normal -send_file_mode: text
 -autorisierung: keine -force_: nein

Hier ist ein Ausführungsbeispiel.

send_smtp_mail.pm -s mailhub.stratus.com -fr noah.davids@stratus.com -sub 'test
+ 3' -msg 'Netzwerk bricht zusammen - call in' -msg 'NOW !!' -an XXXXXX@YYYYY.com
Mail gesendet an XXXXXX@YYYYY.com

Beachten Sie, dass sich die Befehlszeilenargumente von den Argumenten des Formulars unterscheiden. Um die Befehlszeilenargumente anzuzeigen, verwenden Sie die Option -help

send_smtp_mail.pm -help     

 Befehlszeilen-Syntax: (Alle Argumente benötigen einen Wert, um zu folgen)

-server|s
 -Anschluss|p
 -to ;;...
 -cc ;;...
 -bcc ;;...
 -from|fr
 -Antwort|rp|rply
 -return|rtn
 -Wichtigkeit|i hoch|normal|niedrig
 -subject|sub
 -msg|m (mehrere erlaubt)
 -file|f /text|html|binary|text_encl|html_encl (mehrfach erlaubt)
 -auth|a Anmeldung
 -user|u (wird nur für Login-Auth benötigt)
 -passwort|pass (nur für Login-Authentifizierung erforderlich)
 -klammern|b ja|nein
 -domain|dom
 -wiederholung|ret
 -steuerung|c

um den VOS-Formularmodus zu aktivieren, geben Sie die Option -vos vor ALLEN anderen Optionen an.

Das sind Befehle, wie kann man sie in eine Anwendung integrieren? Nun, wenn Ihre Anwendung ein Perl-Skript ist, können Sie mein Skript als Vorlage verwenden, um das SMTP-Modul aufzurufen. Genauso können Sie den C-Code des send_smtp_mail-Moduls in Ihre C-Anwendung integrieren. Die andere Alternative ist, Perl oder den Befehl send_smtp.mail direkt aus Ihrer Anwendung aufzurufen. Angenommen, Ihre Anwendung ist in C geschrieben, dann funktioniert der folgende Aufruf

system ("perl smtp.pl -h mailhub.stratus.com -f noah.davids@stratus.com -s 'APPL
+ICATION ALERT' -m 'Some failure event has occurred' -t XXXXXX@YYYYY.com");

Wenn Sie PL1 oder Cobol verwenden, müssen Sie eine C-Routine schreiben und diese in Ihre Anwendung einbinden.

Zum Schluss noch ein Wort zu den Fehlern.

Wenn es ein Problem mit der from-Adresse gibt, meldet das SMTP-Perl-Modul

perl smtp.pl -h mailhub.stratus.com -f noah.davids -m 'debug test line 1' -m 'de
+bug test line 2' -m 'debug test line 3' -to XXXXXX@YYYYY.com -s 'test 4'
Fehlereinstellung von der Adresse aus schlagen vor, den Verbose-Modus einzustellen

Mit dem vorgeschlagenen Argument verbose können Sie sehen, was der SMTP-Server meldet.

perl smtp.pl -h mailhub.stratus.com -f noah.davids -m 'debug test line 1' -m 'de
+bug test line 2' -m 'debug test line 3' -to XXXXXX@YYYYY.com -s 'test 4' -v
mailhub = mailhub.stratus.com
from = noah.davids
subject = test 4
message [0] = debug test line 1
message [1] = debug test line 2
message [2] = debug test line 3
to [0] = XXXXXX@YYYYY.com

Net::SMTP: Net::SMTP(2.24)
Net::SMTP:   Net::Cmd(2.21)
Net::SMTP:     Exporter(5.566)
Net::SMTP:   IO::Socket::INET(1.26)
Net::SMTP:     IO::Socket(1.27)
Net::SMTP:       IO::Handle(1.21)

Net::SMTP=GLOB(0x402f9c04)>>> MAIL FROM:
Net::SMTP=GLOB(0x402f9c04)<<< 553 5.5.4 ... Domain name required fo
+r sender address noah.davids
Error setting from address  suggest setting verbose mode

Die Datei send_smtp_mail.pm meldet die Antwort des SMTP-Servers ohne weiteres Zutun.

send_smtp_mail.pm -s mailhub.stratus.com -fr noah.davids -sub 'test 4' -msg 'b
+ad von Adresse' -msg 'JETZT !!' -an XXXXXX@YYYYY.com
send_smtp_mail: Erwartet 250 Antwort.  Erhalten: 553 5.5.4 noah.davids... Domänenname r
+erforderlich

Wenn Sie den Mailhub nicht erreichen können, meldet das Perl-Skript

perl smtp.pl -h mailhub.stratus.com -f noah.davids@stratus.com -s 'test 1' -m 'n
+etwork is crashing call in' -m NOW!! -to XXXXXX@YYYYY.com
Cannot reach mailhub <mailhub.stratus.com>

Der Befehl send_smtp_mail meldet

pm>send_smtp_mail.pm -s mailhub.stratus.com -fr noah.davids@stratus.com -sub 'te
+st 2' -msg 'network is crashing call in' -msg 'NOW !!' -an XXXXXX@YYYYY.com
send_smtp_mail: Can't connect to: mailhub.stratus.com Netzwerk versucht zu erreichen
+ed ist unerreichbar.

Eine falsche "to"-Adresse führt bei keinem der beiden Befehle zu Fehlern. Es kann zu einer E-Mail vom Mailhub an die "von"-Adresse führen, die besagt, dass die E-Mail nicht zugestellt werden konnte.

Das Perl-Skript smtp.pl:

# smtp.pl begins here
#
#
# Version 1.00 10-10-31
# noah.davids@stratus.com
#
use Net::SMTP;
use Getopt::Long;
use strict;

my ($mailHub, @To, $From, $Subject, @Message, $Verbose);
my ($Result, $i, $toList);
my ($smtp);

$Result = GetOptions ("hub=s"      => $mailHub,
                      "to=s"       => @To,
                      "from=s"     => $From,
                      "subject=s"  => $Subject,
                      "message=s"  => @Message,
                      "verbose"    => $Verbose);

if (($Result != 1) || !defined($mailHub) || !defined($From) ||
                      !defined($Subject) || !defined(@Message) ||
                      !defined(@To))
   {
   if (defined($mailHub)) { print "mailhub = " . $mailHub . "n"; }
   if (defined($From))    { print "from = " . $From . "n" ; }
   if (defined($Subject)) { print "subject = " . $Subject . "n"; }
   for ($i = 0; $i < @Message; $i++)
        { print "message [" . $i . "] = " . $Message[$i] . "n"; }
   for ($i = 0; $i < @To; $i++)
        { print "to [" . $i . "] = " . $To[$i] . "n"; }
   print "nnUsage:n";
   print "tperl smtp.pl -hub MAILHUB -from SENDER@DOMAIN -subject SUBJECTn";
   print "ttt-message MESSAGE [-message MESSAGE]*n";
   print "ttt-to RECIPIENT@DOMAIN [-to RECIPIENT@DOMAIN]*n";
   print "ttt[-verbose]nn";
   exit;
   }

if (defined($Verbose))
   {
   if (defined($mailHub)) { print "mailhub = " . $mailHub . "n"; }
   if (defined($From))    { print "from = " . $From . "n" ; }
   if (defined($Subject)) { print "subject = " . $Subject . "n"; }
   for ($i = 0; $i < @Message; $i++)
        { print "message [" . $i . "] = " . $Message[$i] . "n"; }
   for ($i = 0; $i < @To; $i++)
        { print "to [" . $i . "] = " . $To[$i] . "n"; }
   }

$smtp = Net::SMTP->new($mailHub) || die "Cannot reach mailhub <" .
                                        $mailHub . ">n";

if (defined($Verbose)) { $smtp->debug(1); }

$smtp->mail($From) || die "Error setting from address <" . $From .
                          "> suggest setting verbose moden";

$toList = $To[0];
$smtp->to($To[0]) || die "Error setting to address <" . $To[0] .
                          "> suggest setting verbose moden";

for ($i = 1; $i < @To; $i++)
    {
    $toList = $toList . ";" . $To[$i];
    $smtp->to($To[$i]) || die "Error setting to address <" . $To[$i] .
                          "> suggest setting verbose moden";

    }

$smtp->data() || die "Error setting data suggest setting verbose moden";

$smtp->datasend("To: " . $toList . "n") ||
       die "Error sending To string <" . $toList .
           "> suggest setting verbose moden";

$smtp->datasend("Subject: " . $Subject . "n") ||
       die "Error sending Subject string <" . $Subject .
           "> suggest setting verbose moden";

$smtp->datasend("n") ||
       die "Error sending newline suggest setting verbose moden";

for ($i = 0; $i < @Message; $i++)
   {
   $smtp->datasend($Message[$i] . "n") || die
       die "Error sending message " . $i . " <" . $Message[$i] .
           "> suggest setting verbose moden";
   }

$smtp->dataend() || die "Error ending data send " .
                        "suggest setting verbose moden";

$smtp->quit || die "Error closing connection suggest setting verbose moden";
#
# smtp.pl ends here

 

© 2020 Stratus Technologies.