Gambas France BETA


Pas de compte ? Incription

gestion erreurs sur pop3

Ce sujet est résolu.

1
AuteurMessages
valaquarus#1 Posté le 19/2/2020 à 12:03:34
-- Unus Ex Altera --Bonjour à tous,
un petit soucis m'amène vers vous que je ne sais pas régler.
Voici une fonction qui teste la validité d'une connexion à un serveur pop3 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
PUBLIC FUNCTION TestServeur() AS BOOLEAN 'test des paramètres de compte

DIM POP1 AS Pop3Client
DIM rep AS BOOLEAN

POP1 = NEW Pop3Client
POP1.host = txtServer.Text
POP1.User = txtUser.text
POP1.Password = txtPass.text
POP1.port = txtPort.text
POP1.Encrypt = IIf(chkSSL.value, 1, 0)

' Net.HostNotFound = -6

TRY POP1.Open ' ici si le port n'est pas correctement défini ou pas laissé à zéro et encrypt mal défini alors blocage du prog
' erreur host Not found

IF NOT ERROR THEN
Message.Info(("La connexion au serveur ") & " < " & txtNom.Text & " > " & (" est efficiente."))
rep = TRUE
ELSE
Message.Info(("La connexion au serveur ") & " < " & txtNom.Text & " > " & (" a échouée."
rep = FALSE
btnNew_Click()
ENDIF

TRY POP1.Close
POP1 = NULL

RETURN rep

END


Comme mentionné en commentaire si le port n'est pas correctement défini ou pas laissé à zéro et encrypt mal défini alors blocage du prog par obtention de l'erreur suivante : host Not found ce qui est logique mais je ne sais pas comment gérer cette erreur.

Si une âme bien charitable veut bien m'aider.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
linuxos#2 Posté le 20/2/2020 à 03:43:38
Un peu de sel, de poivre et la crevette sera... Bonjour valaquarus,

Par hasard as tu essayé d'activer le mode 'debug' par la commande suivante:

<code>POP1.Debug = True</code>

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
linuxos#3 Posté le 20/2/2020 à 03:46:30
Un peu de sel, de poivre et la crevette sera... Bonjour valaquarus,

Par hasard as tu essayé d'activer le mode 'debug' par la commande suivante:

1
POP1.Debug = TRUE


Peut être verra tu passer quelque chose qui t'aidera.

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
valaquarus#4 Posté le 20/2/2020 à 10:30:18
-- Unus Ex Altera --Bonjour Linuxos,
je n'avais pas pensé à cette commande qui renvoie tout ce qui se passe en termes de communication sur la console.
Mais mon problème reste entier car j'ai bien confirmation que l'erreur vient du port mais comment contrôler cette erreur de saisie de la part de l'utilisateur.
Si celui ci rentre 110 alors que le serveur utilise SSL le programme se bloque au lieu de renvoyer une erreur contrôlable. En fait je ne sais pas comment faire pour contrôler juste la connexion au serveur car il n'y a pas de fonction connect comme avec les socket dans POP3Client.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
valaquarus#5 Posté le 21/2/2020 à 17:25:28
-- Unus Ex Altera --Voici comment j'ai tourné autour du problème en utilisant les socket :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
PUBLIC FUNCTION TestServeur() AS BOOLEAN 'test des paramètres de compte

DIM POP1 AS Pop3Client
DIM rep AS BOOLEAN
MySock = NEW Socket
POP1 = NEW Pop3Client
POP1.Debug = TRUE
POP1.host = txtServer.Text
POP1.User = txtUser.text
POP1.Password = txtPass.text
POP1.port = CInt(txtPort.text)
POP1.Encrypt = IIf(chkSSL.value, 1, 0)

IF (POP1.Encrypt = 0) THEN
POP1.Port = 110
MySock.Connect(POP1.Host, POP1.Port)
DO WHILE (MySock.Status <> 7) AND (MySock.Status > 0)
WAIT 0.1
LOOP
IF MySock.Status <= 0 THEN
Message.Info(("Les paramètres du serveur " & " < " & txtNom.Text & " > " & (" ne sont pas bons."))
RETURN
END IF
ENDIF

TRY POP1.Open
IF ERROR THEN
Message.Info(("La connexion au serveur ") & " < " & txtNom.Text & " > " & (" a échouée."
rep = FALSE
btnNew_Click()
ELSE
Message.Info(("La connexion au serveur ") & " < " & txtNom.Text & " > " & (" est efficiente."))
rep = TRUE
ENDIF

FINALLY
TRY POP1.Close
POP1 = NULL
RETURN rep
CATCH
Message.Title = ("Horreur!")
Message(gb.CrLf & ("Une erreur : ") & Error.Text & gb.CrLf & "Code : " & Error.Code & gb.CrLf & " Test Serveur")
Application.Busy = 0
END

C'est un peu limite mais j'ai cru comprendre que les socket ne peuvent pas se connecter en SSL d'où le test uniquement sur le port 110 et si erreur alors le port 995 doit être utilisé.
Philippe.
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
valaquarus#6 Posté le 21/2/2020 à 22:49:25
-- Unus Ex Altera --Bonsoir,
juste un petit commentaire supplémentaire, si j'écris ceci :
1
Message.Info(("La connexion au serveur ") & "[ " & txtNom.Text & " ]" & (" est efficiente."))
le txtNom.text est bien affiché, si au contraire j'écris ceci :
1
Message.Info(("La connexion au serveur ") & "< " & txtNom.Text & " >" & (" est efficiente."))
le txtNom.text n'est pas affiché au milieu de la phrase. Ces deux signes : "<" et ">" seraient ils réservés?
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
1