Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

récupération erreur MAPI

6 réponses
Avatar
Pascal
bonjour,
j'ai un petit soucis avec la gestion d'erreur sur MAPI message.

si je rentre une adresse DESTINATAIRE erronée du genre @MonNOM@yahoo.fr
j'ai une erreur ! mais l'erreur n'est pas récupérée par mon code!
j'ai une erreur d'excécution sur le send me signalant un mauvais nom de
destinataire
comment mapi peut-il prendre la main sur le code
merci de m'éclairer

Pascal




On Error GoTo ErreurMapi
'tentative d'envoi MAPI message
MAPISession1.SignOn
With MAPIMessages1
' .Action = 11
.MsgIndex = -1 '
.RecipDisplayName = sTo 'adresse du destinataire
.MsgSubject = sSujet 'sujet
.MsgNoteText = sText & vbNewLine & Signature 'le corps du
message
.SessionID = MAPISession1.SessionID

.Send False 'envoie le message sans boite de dialogue

MsgBox "Message envoyé"
End With
MAPISession1.SignOff
Exit Function

ErreurMapi:
If Err Then
rep = MsgBox("Le message n'a pas pu être expédié",
vbCritical)
End If

6 réponses

Avatar
Jacques93
Bonjour Pascal,
Pascal a écrit :
bonjour,
j'ai un petit soucis avec la gestion d'erreur sur MAPI message.

si je rentre une adresse DESTINATAIRE erronée du genre @
j'ai une erreur ! mais l'erreur n'est pas récupérée par mon code!
j'ai une erreur d'excécution sur le send me signalant un mauvais nom
de destinataire
comment mapi peut-il prendre la main sur le code
merci de m'éclairer

Pascal




On Error GoTo ErreurMapi
'tentative d'envoi MAPI message
MAPISession1.SignOn
With MAPIMessages1
' .Action = 11
.MsgIndex = -1 '
.RecipDisplayName = sTo 'adresse du destinataire
.MsgSubject = sSujet 'sujet
.MsgNoteText = sText & vbNewLine & Signature 'le corps du
message
.SessionID = MAPISession1.SessionID

.Send False 'envoie le message sans boite de dialogue

MsgBox "Message envoyé"
End With
MAPISession1.SignOff
Exit Function

ErreurMapi:
If Err Then
rep = MsgBox("Le message n'a pas pu être expédié",
vbCritical)
End If



Cela semble être lié à l'implémentation de MAPI (avec OE?). Avec Outlook
Office, ça passe (sauf si l'on appelle la méthode .ResolveName avant
le .Send), mais mon opérateur me répond que le message n'a pas été
envoyé pour cause de destinataire inconnu :

' ***
Certains des destinataires ou tous les destinataires n'ont pas reçu
votre message.

Objet : Réclamation
Date : 10/11/2007 14:44

Impossible de contacter le(s) destinataire(s) suivant(s) :

'@' le 10/11/2007 14:44
Aucun de vos comptes de messagerie n'a pu effectuer l'envoi
à ce destinataire.
' ***

Le mieux est peut être de tester la validité de l'adresse e-mail avant
l'envoi. Pour cela tu peux utiliser 'Microsoft VBScript Regular
Expression 5.5' (à ajouter dans les références).

Private Sub IsValidEMail()
Dim sTo As String
Dim sPattern As String

sTo = "@"
' une adresse e--mail doit avoir le format
sPattern = "^[a-z0-9_.-]+@[a-z0-9.-]{2,}.[a-z]{2,3}$"
MsgBox IIf(ValidExp(sTo, sPattern), "Adresse e-mail valide", _
"Adresse e-mail invalide") & _
vbCrLf & sTo
End Sub

Private Function ValidExp(sExp As String, sPattern As String) As Boolean
Dim MyRegExp As RegExp
Dim myMatches As MatchCollection

Set MyRegExp = New RegExp
MyRegExp.Pattern = sPattern
MyRegExp.IgnoreCase = True
MyRegExp.Global = False
Set myMatches = MyRegExp.Execute(sExp)
ValidExp = (myMatches.Count = 1)
Set myMatches = Nothing
Set MyRegExp = Nothing
End Function


Quelques explications :

<http://authors.aspalliance.com/brettb/VBScriptRegularExpressions.asp>

et les caractères utilisés dans la propriété Pattern (le lien de la page
précédente n'est plus valide, z'arrête pas de changer chez MS :-( ,
enfin là il y a une redirection), mais au cas où :

<http://msdn2.microsoft.com/en-us/library/f97kw5ka.aspx>
--
Cordialement,

Jacques.
Avatar
Pascal
hello jacques,
merci pour ton intervention
c'est clair que outlook (express) prend la main
les différents test m'ont conduits à la même constatation, ce que je ne
m'explique pas c'est pourquoi le one error ne fonctionne pas, dans ma
logique : tentative d'essai mapi, une erreur se produit, elle est récupérée
pour la validité de l'adresse email, j'avais déjà fait une toute petite
fonction de vérification d'adresse, je l'avoue très limite mais les
possibilités d'adresse sont tellement grandes!
grand merci pour le 'Microsoft VBScript Regular

Pascal


"Jacques93" a écrit dans le message de news:

Cela semble être lié à l'implémentation de MAPI (avec OE?). Avec Outlook
Office, ça passe (sauf si l'on appelle la méthode .ResolveName avant le
.Send), mais mon opérateur me répond que le message n'a pas été envoyé
pour cause de destinataire inconnu :

' ***
Certains des destinataires ou tous les destinataires n'ont pas reçu
votre message.

Objet : Réclamation
Date : 10/11/2007 14:44

Impossible de contacter le(s) destinataire(s) suivant(s) :

'@' le 10/11/2007 14:44
Aucun de vos comptes de messagerie n'a pu effectuer l'envoi
à ce destinataire.
' ***

Le mieux est peut être de tester la validité de l'adresse e-mail avant
l'envoi. Pour cela tu peux utiliser 'Microsoft VBScript Regular Expression
5.5' (à ajouter dans les références).

Private Sub IsValidEMail()
Dim sTo As String
Dim sPattern As String

sTo = "@"
' une adresse e--mail doit avoir le format
sPattern = "^[a-z0-9_.-]+@[a-z0-9.-]{2,}.[a-z]{2,3}$"
MsgBox IIf(ValidExp(sTo, sPattern), "Adresse e-mail valide", _
"Adresse e-mail invalide") & _
vbCrLf & sTo
End Sub

Private Function ValidExp(sExp As String, sPattern As String) As Boolean
Dim MyRegExp As RegExp
Dim myMatches As MatchCollection

Set MyRegExp = New RegExp
MyRegExp.Pattern = sPattern
MyRegExp.IgnoreCase = True
MyRegExp.Global = False
Set myMatches = MyRegExp.Execute(sExp)
ValidExp = (myMatches.Count = 1)
Set myMatches = Nothing
Set MyRegExp = Nothing
End Function


Quelques explications :

<http://authors.aspalliance.com/brettb/VBScriptRegularExpressions.asp>

et les caractères utilisés dans la propriété Pattern (le lien de la page
précédente n'est plus valide, z'arrête pas de changer chez MS :-( , enfin
là il y a une redirection), mais au cas où :

<http://msdn2.microsoft.com/en-us/library/f97kw5ka.aspx>
--
Cordialement,

Jacques.


Avatar
Jacques93
Pascal a écrit :
hello jacques,
merci pour ton intervention
c'est clair que outlook (express) prend la main
les différents test m'ont conduits à la même constatation, ce que je ne
m'explique pas c'est pourquoi le one error ne fonctionne pas, dans ma
logique : tentative d'essai mapi, une erreur se produit, elle est récupérée
pour la validité de l'adresse email, j'avais déjà fait une toute petite
fonction de vérification d'adresse, je l'avoue très limite mais les
possibilités d'adresse sont tellement grandes!
grand merci pour le 'Microsoft VBScript Regular




Il doit y avoir autre chose, j'ai repris ton code à l'identique et ait
mis OE en messagerie par défaut. L'erreur est bien interceptée, chez moi

Err.Number = 32014
Err.Description = Destinataire inconnu
Err.Source = MAPIMessages

NB : L'erreur se produit logiquement sur le .Send False

--
Cordialement,

Jacques.
Avatar
Pascal
hello jacques,
tu t'en donnes du mal pour moi, sympa!
interceptée peut -être mais redirigée ---> ONE ERREUR GOTO ErreurMapi
il ne va pas sur ErreurMapi:
casse tête!
la fonction ValidExp = du grand art, merci!

b à toi
Pascal

"Jacques93" a écrit dans le message de news:

Pascal a écrit :
hello jacques,
merci pour ton intervention
c'est clair que outlook (express) prend la main
les différents test m'ont conduits à la même constatation, ce que je ne
m'explique pas c'est pourquoi le one error ne fonctionne pas, dans ma
logique : tentative d'essai mapi, une erreur se produit, elle est
récupérée
pour la validité de l'adresse email, j'avais déjà fait une toute petite
fonction de vérification d'adresse, je l'avoue très limite mais les
possibilités d'adresse sont tellement grandes!
grand merci pour le 'Microsoft VBScript Regular




Il doit y avoir autre chose, j'ai repris ton code à l'identique et ait mis
OE en messagerie par défaut. L'erreur est bien interceptée, chez moi

Err.Number = 32014
Err.Description = Destinataire inconnu
Err.Source = MAPIMessages

NB : L'erreur se produit logiquement sur le .Send False

--
Cordialement,

Jacques.


Avatar
Jacques93
Jacques93 a écrit :
[...]

Il doit y avoir autre chose, j'ai repris ton code à l'identique et ait
mis OE en messagerie par défaut. L'erreur est bien interceptée, chez moi

Err.Number = 32014
Err.Description = Destinataire inconnu
Err.Source = MAPIMessages

NB : L'erreur se produit logiquement sur le .Send False




Petite précision : Je n'obtiens cette erreur que si l'adresse invalide
ne se trouve pas dans les contacts de OE. Bien qu'il y ait un message
d'avertissement de OE, on peut y saisir des adresses invalide !!!

Et dans ce cas, le messsage est envoyé, pas d'erreur VB mais un message
de l'opérateur, revient dans OE :

Impossible d'envoyer le message car l'un des destinataires a été
refusé par le serveur. L'adresse de messagerie refusée était
'@'. Objet 'Test OE - MAPI', Compte : 'Orange', Serveur
:'smtp.orange.fr', Protocole : SMTP, Réponse du serveur : '501 Bad
address syntax', Port : 25, Sécurisé (SSL) : Non, Erreur de serveur :
501, Numéro d'erreur : 0x800CCC79


<http://cjoint.com/?lkrAGqlyjd>

--
Cordialement,

Jacques.
Avatar
Jacques93
Pascal a écrit :
hello jacques,
tu t'en donnes du mal pour moi, sympa!



C'est toi qui pose la question, mais cela peut intéresser d'autres
personnes ;-) , enfin peut être ... En tout cas c'est un des buts des
forums (ou fora, si je n'ai pas perdu mon latin)

interceptée peut -être mais redirigée ---> ONE ERREUR GOTO ErreurMapi
il ne va pas sur ErreurMapi:



Chez moi si !

casse tête!
la fonction ValidExp = du grand art, merci!



Je l'ai repiquée je ne sais plus où, mais les Regular Expression sont
courantes dans les shell Unix, et dans beaucoup de langage de script, et
permettent de réaliser des trucs assez puissants. Mais il faut
reconnaître qu'au début,la syntaxe des pattern peut paraître un peu
ésotérique ;-)

--
Cordialement,

Jacques.