Skip to main content

Votre application vient de détecter un état critique, vous pouvez écrire un message dans un journal d'application ou même dans le syserr_log mais comment avertir quelqu'un dès maintenant que l'application a besoin d'attention ? La réponse évidente est d'envoyer un e-mail ou un SMS à quelqu'un ou peut-être à plusieurs personnes MAIS OpenVOS n'a pas de système intégré pour le faire, ou en a-t-il un ?

La gnu_library comprend la commande Perl et un grand nombre de modules Perl (fichiers pm, à ne pas confondre avec les modules de programmes). L'un de ces modules est SMTP.pm. Qui, selon la documentation, "implémente une interface client pour le protocole SMTP et ESMTP, permettant à une application perl5 de parler aux serveurs SMTP".

J'ai écrit le script Perl suivant en utilisant ce module. En invoquant le script sans aucun argument, vous obtiendrez le message d'utilisation

perl smtp.pl

Utilisation :
   perl smtp.pl -hub MAILHUB -from SENDER@DOMAIN -subject
                -message MESSAGE [-message MESSAGE]*
                -au RECIPIENT@DOMAINE [-au RECIPIENT@DOMAINE]*
                [-verbose]

Les arguments requis sont le serveur SMTP alias mailhub (-h), l'expéditeur, en tant qu'adresse électronique (-f), un objet (-s) et au moins une ligne de message (-m) et un destinataire (-t). Si le texte de l'objet ou d'une ligne de message contient des espaces, le texte doit être mis entre guillemets. Le -v est une aide au débogage facultative et indique que tous les arguments et la communication avec le serveur SMTP doivent être affichés.

Par exemple, si je veux envoyer un e-mail sur le compte lié à mon téléphone, je pourrais exécuter

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

Comme vous pouvez le voir, vous pouvez abréger les arguments à leurs premières lettres seulement, et désolé mais vous ne pouvez pas voir le compte e-mail de mon téléphone. Le courrier ressemblait à

De : Noah Davids
test 1
Oct 28, 2010 12:42

Le réseau s'effondre dans l'appel
MAINTENANT !

L'envoi d'un SMS est exactement le même que l'envoi d'un e-mail, mais l'adresse "à" est phonenumber@phonecompany. Le numéro de téléphone est évidemment le numéro de téléphone du téléphone. Le domaine de la société de téléphone varie selon la société de téléphone.

Par exemple

perl smtp.pl -h mailhub.stratus.com -f noah.davids@stratus.com -s 'test 2' -m 'n
+etwork is crashing call in' -m NOW !! -à 5555555555@phonecompany

Vous remarquerez que les lignes sont jointes et que vous ne voyez pas non plus mon numéro de téléphone ou mon fournisseur de services.

Sujet:test 2
 Le réseau est en train de s'effondrer en MAINTENANT !

J'ai trouvé les entrées qui composent la liste suivante ici et ici.. J'ai testé Sprint et Verizon, vous êtes seul avec les autres.

Alltel message.alltel.com
AT&T txt.att.net
AT&T MMS MMS.att.net
Cingular cingularme.com
Metro PCS MyMetroPcs.com
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.com
Virgin Mobile vmobl.com

Si vous n'avez pas installé la gnu_library, il y a un client SMTP sur le serveur ftp.stratus.com, vous pouvez télécharger une offre groupée en cliquant ici. Le paquet comprend le code source et aussi des modules de programme pour tous les types de matériel et des piles TCP.

send_smtp_mail.pm -formulaire

-------------------------------- send_smtp_mail ------------------------------
 -smtp_server :
 -to :
 -cc :
 -bcc :
 -from :
 -reply_to :
 -return_receipt_to :
 -subject :
 message_1 :
 message_2 :
 message_3 :
 message_4 :
 message_5 :
 message_6 :
 -envoyer_fichier :
 -smtp_port : smtp
 -retry_times :
 -nom_de_l'utilisateur :
 -mot de passe :
 -control :
 -domaine :
 -importance : normal -mode_envoi_de_fichier : texte
 -autorisation : aucune -force_ : non

Voici un exemple d'exécution.

send_smtp_mail.pm -s mailhub.stratus.com -fr noah.davids@stratus.com -sub 'test
+ 3' -msg "le réseau s'effondre" - msg "MAINTENANT ! -to XXXXXX@YYYYY.com
Courrier envoyé à XXXXXX@YYYYY.com

Notez que les arguments de la ligne de commande sont différents des arguments du formulaire. Pour afficher les arguments de la ligne de commande, utilisez l'option -help

send_smtp_mail.pm -help     

 Syntaxe de la ligne de commande : (Tous les arguments nécessitent une valeur à suivre)

-Serveur
 -port|p
 -à ;; ;...
 -cc ;; ;...
 -bcc ;; ;...
 -from|fr
 -réponse|rp|rply
 -retour|rtn
 -importance|i élevée|normale|faible
 -sujet|sub
 -msg|m (multiple autorisé)
 -file|f /text|html|binary|text_encl|html_encl (multiple autorisé)
 -auth|a login
 -user|u (uniquement nécessaire pour l'authentification de la connexion)
 -password|pass (uniquement nécessaire pour l'authentification)
 -braces|b oui|non
 -Domaine
 -retry|ret
 -control|c

pour activer le mode formulaire VOS, fournissez l'option -vos avant TOUTES les autres options.

Ce sont des commandes, comment les intégrer dans une application ? Bien évidemment, si votre application est un script Perl, vous pouvez utiliser mon script comme modèle pour passer des appels au module SMTP. De la même manière, vous pouvez intégrer le code C des modules send_smtp_mail dans votre application C. L'autre solution consiste à appeler Perl ou la commande send_smtp.mail directement depuis votre application. En supposant que votre application soit en C, l'appel suivant fonctionnera

système ("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") ;

Si vous utilisez PL1 ou Cobol, vous devrez écrire une routine C et la lier à votre demande.

Enfin, parlons des erreurs.

En cas de problème avec l'adresse de départ, le module SMTP Perl signalera

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
Une erreur d'adresse suggère de régler le mode verbeux

En utilisant l'argument verbeux suggéré, vous pouvez voir ce que le serveur SMTP rapporte.

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

Le fichier send_smtp_mail.pm rapportera la réponse du serveur SMTP sans aucune sollicitation supplémentaire.

send_smtp_mail.pm -s mailhub.stratus.com -fr noah.davids -sub 'test 4' -msg 'b
+ad from address' -msg 'NOW ! -to XXXXXX@YYYYY.com
send_smtp_mail : 250 réponses attendues.  Obtenu : 553 5.5.4 noah.davids... Nom de domaine r
+ requis

Si vous ne pouvez pas atteindre le mailhub, le script Perl vous indiquera

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>

La commande send_smtp_mail rapporte

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 ! -to XXXXXX@YYYYY.com
send_smtp_mail : Impossible de se connecter à : mailhub.stratus.com Réseau essayant d'être joignable
+ed est injoignable.

Une mauvaise adresse "à" ne générera aucune erreur de l'une ou l'autre commande. Il peut en résulter un courrier électronique provenant du centre de messagerie vers l'adresse "de" indiquant que le courrier n'a pas pu être distribué.

Le script Perl 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.