Page 1 sur 1

[R] Tester la connectivité de mon serveur SMTP

Posté : sam. 02 juin 2012 16:37
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.

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

Posté : dim. 03 juin 2012 14:06
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.

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

Posté : dim. 03 juin 2012 18:10
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 ...

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

Posté : lun. 04 juin 2012 09:25
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"

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

Posté : lun. 04 juin 2012 10:26
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 ?

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

Posté : lun. 04 juin 2012 11:25
par mikell
Hum pourquoi ne pas utiliser simplement la gestion d'erreur de la fonction _INetSmtpMailCom ?
► Afficher le texte

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

Posté : lun. 04 juin 2012 12:14
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.

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

Posté : lun. 04 juin 2012 12:52
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

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

Posté : lun. 04 juin 2012 14:03
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

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

Posté : lun. 04 juin 2012 14:10
par myroot66
:roll:

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

Posté : lun. 04 juin 2012 16:05
par Tlem
Vous pouvez tout simplement rééditer votre message pour les rajouter !!!

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

Posté : lun. 04 juin 2012 18:31
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

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

Posté : mar. 05 juin 2012 09:05
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]

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

Posté : mar. 05 juin 2012 13:48
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 !

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

Posté : mar. 05 juin 2012 14:17
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.

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

Posté : mer. 06 juin 2012 01:00
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]

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

Posté : mer. 06 juin 2012 17:22
par blacksoul305
Si le sujet est résolu, n'oublie pas la balise [R] dans le titre de ton premier message !