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 [email protected] -s 'test 1' -m 'n
+Netzwerk stürzt ab Aufruf in' -m NOW!! -an [email protected]
|
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 [email protected] -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 [email protected] -sub 'test
+ 3' -msg 'Netzwerk bricht zusammen - call in' -msg 'NOW !!' -an [email protected]
Mail gesendet an [email protected]
|
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 [email protected] -s 'APPL
+ICATION ALERT' -m 'Some failure event has occurred' -t [email protected]");
|
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 [email protected] -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 [email protected] -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] = [email protected]
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 [email protected]
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 [email protected] -s 'test 1' -m 'n
+etwork is crashing call in' -m NOW!! -to [email protected]
Cannot reach mailhub <mailhub.stratus.com>
|
Der Befehl send_smtp_mail meldet
pm>send_smtp_mail.pm -s mailhub.stratus.com -fr [email protected] -sub 'te
+st 2' -msg 'network is crashing call in' -msg 'NOW !!' -an [email protected]
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
# [email protected]
#
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
|