[R] Tester la connectivité de mon serveur SMTP

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
myroot66
Niveau 1
Niveau 1
Messages : 9
Enregistré le : sam. 02 juin 2012 16:30
Status : Hors ligne

[R] Tester la connectivité de mon serveur SMTP

#1

Message par myroot66 »

Bonjour,
Je souhaite pouvoir utiliser un script qui test depuis l’extérieur de mon réseau la connectivité de mon serveur SMTP et en cas de non réponse m'envoie un mail avec un compte gmail ou autre.
Merci d'avance pour votre aide.
Modifié en dernier par myroot66 le jeu. 14 juin 2012 09:14, modifié 1 fois.
Avatar du membre
myroot66
Niveau 1
Niveau 1
Messages : 9
Enregistré le : sam. 02 juin 2012 16:30
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#2

Message par myroot66 »

Quelques précisions sur ma demande.

J'administre une passerelle de messagerie pour ma société au niveau national, il arrive malheureusement que le serveur SMTP se suicide sans prévenir.
Quand cela se produit je n'ai aucune alerte et si c'est pendant un week-end les mails sont refusés ce qui est dommageable car les mails sont perdus.

J'aimerais donc mettre en place un script qui depuis l'extérieur test la réception des mails par la passerelle SMTP, peut être en utilisant la fonction "_INetSmtpMailCom" vers mon serveur.
Si il y a une erreur on envoi un mail avec une boîte de messagerie GMAIL qui serait réceptionné sur mon smartphone et me permettrait d'intervenir pour remettre en service notre passerelle SMTP dans un délais le plus rapide possible.

Voila pour l'essentiel, ne pas hésiter à me demander d'autres renseignements si ma demande n'est pas claire.

Encore une fois merci d'avance pour votre aide qui me soulagerais d'un poids, car j'ai eu plusieurs plantages sur le mois de MAI 2012 les week-end de pont avec une indisponibilité du serveur.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#3

Message par Tlem »

Si je me souvient bien, il y a sur le forum plusieurs UDF qui permettent d'envoyer un email.

Le but serait donc d'envoyer un email administratif et si le serveur SMTP ne fait pas son taf, c'est qu'il est out ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
myroot66
Niveau 1
Niveau 1
Messages : 9
Enregistré le : sam. 02 juin 2012 16:30
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#4

Message par myroot66 »

Merci de votre réponse.

Effectivement c'est ce que je voudrais, mais si mon SMTP est OUT le script m'envoie un mail sur une boîte GMAIL, les serveurs de GMAIL ayant une disponibilité très proche des 100%.

Si je demande la création du script c'est surtout pour la condition " IF " le mail n'est pas remis à mon serveur je send un mail avec une boîte GMAIL.

Débutant sur AUTOIT c'est pour cela que je poste sur "Demande de création de script" mais si il n'est pas possible d'avoir un script complet, pouvez-vous me fournir le lien vers l'UDF qui permet d'envoyer un email et surtout la ligne de commande a ajouter entre les deux "SEND MAIL"
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#5

Message par sksbir »

Bonjour

Dans la mesure où c'est réellement la connectivité du serveur qu'il faut tester , il est inutile d'aller jusqu'à envoyer un mail au serveur à tester. Il suffit d'exécuter la 1ere étape du protocole SMTP.
Plus d'infos sur le protocole smtp ici : http://www.commentcamarche.net/contents ... /smtp.php3

De plus, on n'est pas forcé de faire ça depuis l'extérieur sauf si on veut vérifier la connectivité du serveur vers internet dans la même opération : même si le serveur est en panne, un script indépendant peut parfaitement envoyer un mail en s'appuyant sur les serveurs smtp de gmail par exemple...
Ceci dit, si le serveur smtp à tester fonctionne sous unix, la machine extérieure est indispensable si on veut réaliser ça sous autoit...

Du coup, la question à se poser devient : faut-il réaliser ce test sous autoit ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#6

Message par mikell »

Hum pourquoi ne pas utiliser simplement la gestion d'erreur de la fonction _INetSmtpMailCom ?
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
myroot66
Niveau 1
Niveau 1
Messages : 9
Enregistré le : sam. 02 juin 2012 16:30
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#7

Message par myroot66 »

Pour répondre à " sksbir " que je remercie pour sa réponse, si je veux envoyer le message depuis l'extérieur c'est que cela test plusieurs équipements de mon réseau et valide le cheminement complet du message (passerelle anti spam en frontal )

Mikeel merci pour le script utilisant la fonction _INetSmtpMailCom, cependant est ce qu'il serait possible de le modifier pour que :

Le premier mail est envoyé vers un compte connu de mon serveur SMTP, ce qui est déjà en place dans ton exemple de script, par contre si :

If @error Then
; If $mail = 0 Then
au lieu de " MsgBox(0,"Erreur","Message non envoyé") " le script envoi un second mail grâce à d'autres variables vers un destinataire correspondantes à un compte GMAIL ?
Pour précession le script sera exécuté sur un serveur externe en tâches planifiées.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#8

Message par mikell »

Bien sûr, on peut toujours définir 2 'jeux' de variables en début de script et procéder comme ça

Code : Tout sélectionner

$mail1 = _INetSmtpMailCom($s_SmtpServer1, ......)
If not @error Then
    MsgBox(0,"Terminé!","Message envoyé avec succès" )
Else
    $mail2 = _INetSmtpMailCom($s_SmtpServer2, .......)
EndIf
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
myroot66
Niveau 1
Niveau 1
Messages : 9
Enregistré le : sam. 02 juin 2012 16:30
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#9

Message par myroot66 »

Merci pour votre réponse.

Le script pourrait être comme ci-dessous mais il me semble qu'il faudrait modifier la " func ", les variables ne semble plus adaptées, non ?
En plus j'aimerais que si " If not @error " on ne fasse rien, pas de message box ou la temporiser. Est-ce possible ?
► Afficher le texte
Modifié en dernier par myroot66 le lun. 04 juin 2012 17:35, modifié 1 fois.
Avatar du membre
myroot66
Niveau 1
Niveau 1
Messages : 9
Enregistré le : sam. 02 juin 2012 16:30
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#10

Message par myroot66 »

:roll:
Modifié en dernier par myroot66 le lun. 04 juin 2012 18:12, modifié 3 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#11

Message par Tlem »

Vous pouvez tout simplement rééditer votre message pour les rajouter !!!
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#12

Message par mikell »

Code : Tout sélectionner

$mail1 = _INetSmtpMailCom($s_SmtpServer1, $s_FromName1, $s_FromAddress1, $s_ToAddress1, $s_Subject1, $as_Body1)
If @error Then 
    $mail2 = _INetSmtpMailCom($s_SmtpServer2, $s_FromName2, $s_FromAddress2, $s_ToAddress2, $s_Subject2, $as_Body2)
EndIf
Avec ce code le script se ferme tout simplement après envoi du ou des mail(s)
Et non, il ne faut pas toucher à la fonction
Il ne faut pas confondre les variables qui figurent dans la définition de la fonction et celles qu'on attribue à la fonction quand on l'exécute Image
D'ailleurs dans les 2 "jeux" certaines variables n'ont peut-être pas besoin d'être redéfinies, comme $s_FromName1 ou $s_FromAddress1 (si l'expéditeur est le même pour les 2 mails) etc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
myroot66
Niveau 1
Niveau 1
Messages : 9
Enregistré le : sam. 02 juin 2012 16:30
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#13

Message par myroot66 »

Ok donc le code du script donne le résultat ci-dessous.
Nous ne retrouvons pas les variables " $s_ToAddress1" , " $s_ToAddress2" mais " $s_ToAddress " dans la fonction, est-ce que cela aura une incidence ?

Code : Tout sélectionner

[spoiler=]; pour envoi sans pièce jointe
Global $g_eventerror = 0
$oMyError = ObjEvent("AutoIt.Error","MyErrFunc")

$s_SmtpServer = "smtp.wanadoo.fr"
$s_FromName = "***"
$s_FromAddress = "***@wanadoo.fr"                        ;Adresse d'envoi
$s_ToAddress1 = "test@mon_domaine.fr"                    ;Adresse de réception 1 pour le test
$s_Subject1 = "Test My SMTP"
$as_Body1 = "Est-ce que le serveur est ok"
$s_ToAddress2 = "Rapport@free.fr"                           ;Adresse de réception 2 pour le rapport
$s_Subject2 = "Rapport d'erreur SMTP"
$as_Body2 = "Le serveur n’est pas fonctionnel."
$s_CcAddress = ""
$s_BccAddress = ""
$s_Username = ""
$s_Password = ""
$IPPort = 25
$ssl = 0

$mail1 = _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress1, $s_Subject1, $as_Body1)

If @error Then
    $mail2 = _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress2, $s_Subject2, $as_Body2)
EndIf

Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "",$IPPort=25, $ssl=0)
    $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($as_Body,"<") and StringInStr($as_Body,">") Then
        $objEmail.HTMLBody = $as_Body
    Else
        $objEmail.Textbody = $as_Body & @CRLF
    EndIf
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    If $s_Username <> "" Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $Ssl Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    $objEmail.Configuration.Fields.Update
    $objEmail.Send
    if $g_eventerror then
        SetError(1)
        $g_eventerror = 0
    return 0
    EndIf
Return 1
EndFunc


Func MyErrFunc()
   $g_eventerror = 1
Endfunc[/spoiler]
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#14

Message par mikell »

Tel que tu l'as écrit, c'est bon et ça doit marcher
Je te suggère de faire un test réel pour avoir confirmation :wink:

En fait la confusion vient de quelque chose que AMHA il ne faut pas faire : c'est donner le même nom aux variables qui sont en paramètres dans la définition de la fonction et à celles que tu utilises quand tu appelles la fonction
Dans le 1er cas, elles sont automatiquement déclarées en Local dans le code de la fonction
Dans l'autre elles sont en Global dans le corps du script, ce ne sont pas les mêmes !
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
myroot66
Niveau 1
Niveau 1
Messages : 9
Enregistré le : sam. 02 juin 2012 16:30
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#15

Message par myroot66 »

Ok merci pour cette réponse.

Quand je fait le test le premier mail n'est pas reçu, j'utilise un compte sur " smtp.sfr.fr " avec $IPPort = 25 et ssl = 0, je ne suis pas sur des paramètres.
J'ai remis le " If @error Then - MsgBox(0,"Erreur","Message non envoyé") et j'ai bien la boîte "message non envoyé"

Je suis actuellement sur mon lieu de travail et je referais des tests ce soir depuis mon domicile.
Ce sera plus parlant puisque le script devra être exécuté depuis l'extérieur de mon réseau.
Avatar du membre
myroot66
Niveau 1
Niveau 1
Messages : 9
Enregistré le : sam. 02 juin 2012 16:30
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#16

Message par myroot66 »

Après avoir effectué les tests, on constate que le script fonctionne.

$mail1 : c'est le mail de test envoyé vers le serveur de messagerie que l'on souhaite tester.
$mail2 : c'est le mail d'alerte envoyé vers une boîte externe comme GMAIL que l'on réceptionnera sur un smartphone.

J'ai modifié le script en modifiant la variable "$s_SmtpServer" en y incluant une erreur pour simuler une erreur SMTP.
Le second mail est bien envoyé.

Le script fonctionnel est celui ci-dessous.
Les variables $s_SmtpServer1 et $s_SmtpServer2 servent pour les tests (on renseigne une erreur sur la variable $s_SmtpServer1 pour forcer l’envoi du mail d'alerte) .

Merci pour ton aide mikell.

Code : Tout sélectionner

[spoiler=]; pour envoi sans pièce jointe
Global $g_eventerror = 0
$oMyError = ObjEvent("AutoIt.Error","MyErrFunc")

$s_SmtpServer1 = "smtp.sfr.fr"
$s_FromName = "Supervision"
$s_FromAddress = "******@sfr.fr"                        ;Adresse d'envoi
$s_ToAddress1 = "*******@mon_domaine.fr"                    ;Adresse de réception 1 pour le test
$s_Subject1 = "Test My SMTP"
$as_Body1 = "Le serveur est ok"
$s_SmtpServer2 = "smtp.sfr.fr"
$s_ToAddress2 = "*******@laposte.net"                           ;Adresse de réception 2 pour le rapport
$s_Subject2 = "Rapport d'erreur SMTP"
$as_Body2 = "Le serveur n’est pas fonctionnel."
$s_CcAddress = ""
$s_BccAddress = ""
$s_Username = "My_userName"
$s_Password = "My_password"
$IPPort = 25
$ssl = 0

$mail1 = _INetSmtpMailCom($s_SmtpServer1, $s_FromName, $s_FromAddress, $s_ToAddress1, $s_Subject1, $as_Body1)

If @error Then
    $mail2 = _INetSmtpMailCom($s_SmtpServer2, $s_FromName, $s_FromAddress, $s_ToAddress2, $s_Subject2, $as_Body2)
EndIf

Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "",$IPPort = 25, $ssl = 0)
    $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($as_Body,"<") and StringInStr($as_Body,">") Then
        $objEmail.HTMLBody = $as_Body
    Else
        $objEmail.Textbody = $as_Body & @CRLF
    EndIf
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    If $s_Username <> "" Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $Ssl Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    $objEmail.Configuration.Fields.Update
    $objEmail.Send
    if $g_eventerror then
        SetError(1)
        $g_eventerror = 0
    return 0
    EndIf
Return 1
EndFunc


Func MyErrFunc()
   $g_eventerror = 1
Endfunc[/spoiler]
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [..] Tester la connectivité de mon serveur SMTP

#17

Message par blacksoul305 »

Si le sujet est résolu, n'oublie pas la balise [R] dans le titre de ton premier message !
Étudiant en 2ème année de Licence Informatique.
Répondre