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

MAPI Message

11 réponses
Avatar
Pascal
bonsoir,
j'abuse je sais mais c'est comme cela que je progresse.
j'ai fais une petite fonction pour l'envoi de mail
d'abord par CDO, si ne répond pas, tentative par MAPI
sur CDO aucun soucis mais MAPI me donne du fil à retordre à savoir:
le .Send False me donne malgré tout la boîte de dialogue me
signalant l'envoi du message????

Auriez-vous la gentillesse de jeter un oeil à ce code et me dire le
pourquoi, mauvaise implémentation?

merci d'avance

Pascal

**********************************************************************
Private Function GoMail(sFrom As String, sTo As String, sSujet As String, _
sText As String, Relais As String, _
Optional Signature As String, Optional
PieceJointe1 As String, _
Optional PieceJointe2 As String)

Dim rep As String
With CreateObject("CDO.Message")
.From = sFrom
.To = sTo
.Subject = sSujet
.TextBody = sText & vbNewLine & Signature
.AddAttachment PieceJointe1
.AddAttachment PieceJointe2
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")
= 2
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")
= Relais
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")
= 25
.Configuration.Fields.Update

On Error GoTo ErreurCdo
.Send
MsgBox "Message envoyé"
Exit Function 'l'envoi s'est bien passé on sort de la sub

ErreurCdo:
If Err Then
rep = MsgBox("Le message n'a pas pu être expédié" & vbCrLf & _
"Cliquez sur OK pour tenter un envoi MAPI" & vbCrLf & _
"l'expéditeur sera la première adresse valide de " &
vbCrLf & _
"votre messagerie", vbOKCancel + vbCritical, "Erreur
Relais SMTP")
If rep = vbCancel Then Exit Function
End If

'tentative d'envoi MAPI message
MAPISession1.SignOn
With MAPIMessages1

.AddressResolveUI = True 'verifie l'adresse de messagerie dans
la liste
.ResolveName 'des utilisateurs inscrit dans le
système de courrier électronique
.MsgIndex = -1 '
.RecipDisplayName = sTo 'l adresse du destinataire
.MsgSubject = sSujet 'le sujet
.MsgNoteText = sText 'le corps du message
.SessionID = MAPISession1.SessionID
If Len(PieceJointe1) > 0 Then .AttachmentPathName = PieceJointe1

On Error GoTo ErreurMapi
.Send False <<<--------ERREUR ICI (boite de dialogue
toujours présente)
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, "Erreur Relais SMTP")
End If

MAPISession1.SignOff
End With
End Function

10 réponses

1 2
Avatar
Jean-marc
Pascal wrote:
bonsoir,
j'abuse je sais mais c'est comme cela que je progresse.
j'ai fais une petite fonction pour l'envoi de mail
d'abord par CDO, si ne répond pas, tentative par MAPI
sur CDO aucun soucis mais MAPI me donne du fil à retordre à savoir:
le .Send False me donne malgré tout la boîte de dialogue
me signalant l'envoi du message????

Auriez-vous la gentillesse de jeter un oeil à ce code et me dire le
pourquoi, mauvaise implémentation?



Hello,

si ton client MAPI est OutLook Express (pas Outlook), ça peut
venir d'un paramètre de configuration:

Dans Outlook Express, menu Outils, Options, Onglet Sécurité:
"[ ] m'avertir lorsque une application internet essaie d'envoyer un message"

Si elle est cochée (valeur par défaut), il faut la décocher.
Ca "peut" régler le problème.


Sinon, il y a des explications ici et du code binn écrit:
http://www.vbfrance.com/codes/ENVOYER-MAILS-MESSAGERIE-SYSTEME-MICROSOFT-OUTOOK-OUTLOOK-EXPRESS_30601.aspx


Plus intéressant, J'ai retrouvé un vieux document Microsoft
que je t'ai copié ici:
http://users.skynet.be/candide/jmn/mapi/MAPISpecification.doc

Pas mal fait, clair et détaillé.

Sinon bien sur notre FAQ, qui consacre un article au
sujet:
http://faq.vb.free.fr/index.php?question=2


Bonne lecture :o)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Pascal
Bonsoir Jean-Marc,
tu as mis exactement le doigt dessus, j'ai décoché et tout va bien,j'aurais
pû chercher longtemps!
Est-ce dur à coder de le faire par programmation ?
test si case cochée, on décoche, on envoie le mail, on recoche
je me dirige vers quoi pour faire cela?
merci za toi, vais finir par prendre un abonnement !
Pascal
ps:Les articles que j'ai survolé pour l'instant sont super interessant et
t'en remercie


"Jean-marc" a écrit dans le message
de news: 472ca159$0$29248$
Pascal wrote:
bonsoir,
j'abuse je sais mais c'est comme cela que je progresse.
j'ai fais une petite fonction pour l'envoi de mail
d'abord par CDO, si ne répond pas, tentative par MAPI
sur CDO aucun soucis mais MAPI me donne du fil à retordre à savoir:
le .Send False me donne malgré tout la boîte de dialogue
me signalant l'envoi du message????

Auriez-vous la gentillesse de jeter un oeil à ce code et me dire le
pourquoi, mauvaise implémentation?



Hello,

si ton client MAPI est OutLook Express (pas Outlook), ça peut
venir d'un paramètre de configuration:

Dans Outlook Express, menu Outils, Options, Onglet Sécurité:
"[ ] m'avertir lorsque une application internet essaie d'envoyer un
message"

Si elle est cochée (valeur par défaut), il faut la décocher.
Ca "peut" régler le problème.


Sinon, il y a des explications ici et du code binn écrit:
http://www.vbfrance.com/codes/ENVOYER-MAILS-MESSAGERIE-SYSTEME-MICROSOFT-OUTOOK-OUTLOOK-EXPRESS_30601.aspx


Plus intéressant, J'ai retrouvé un vieux document Microsoft
que je t'ai copié ici:
http://users.skynet.be/candide/jmn/mapi/MAPISpecification.doc

Pas mal fait, clair et détaillé.

Sinon bien sur notre FAQ, qui consacre un article au
sujet:
http://faq.vb.free.fr/index.php?question=2


Bonne lecture :o)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Avatar
Jean-marc
Pascal wrote:
Bonsoir Jean-Marc,
tu as mis exactement le doigt dessus, j'ai décoché et tout va
bien,j'aurais pû chercher longtemps!
Est-ce dur à coder de le faire par programmation ?
test si case cochée, on décoche, on envoie le mail, on recoche
je me dirige vers quoi pour faire cela?



Hello,
C'est compliqué à faire de manière systématique.
Bon disons en gros que OE stocke ses paramètres
de config dans la base de registre, dans un endroit comme ceci:

HKEY_CURRENT_USERIdentities{...-...}SoftwareMicrosoftOutLook Express5.0

la dedans il y a différentes sections dont une s'appelle Mail
Et la dedans, plusieurs clés.
L'une d'entre elle s'appelle "Warn On Mapi Send" et si je devais faire
des essais, c'est avec cette valeur que je jouerais ...

En pratique c'est plus compliqué de localiser le bon endroit dans la
registry.
Tu peux t'inspirer des 2 articles suivants:
http://email.about.com/cs/oetipstricks/qt/et010603.htm
et conjonction avec:
http://email.about.com/cs/oetipstricks/qt/et101202.htm

Pour accéder à la BDR depuis VB, tu trouveras toutes les infos
nécessaires dans notre FAQ:
http://faq.vb.free.fr/index.php?rubrique=7

<warning>
Fais gaffe si tu commences à jouer avec la base de registre...
C'est un des moyens les plus efficaces pour planter ta
machine de façon irrémédiable.
Je conseillerais donc de faire les choses ... prudemment :-))
</warning>

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Jacques93
Bonjour Pascal,
Pascal a écrit :
Bonsoir Jean-Marc,
tu as mis exactement le doigt dessus, j'ai décoché et tout va
bien,j'aurais pû chercher longtemps!
Est-ce dur à coder de le faire par programmation ?
test si case cochée, on décoche, on envoie le mail, on recoche
je me dirige vers quoi pour faire cela?



Outlook Express n'exposant pas d'interface COM, il faut bidouiller le
registre. La clé correspondant à cette option est :

Warn on Mapi Send

de type REG_DWORD (0 = désactivé, 1 = activé) et se trouve dans

HKEY_CURRENT_USERIdentities{USER_ID}SoftwareMicrosoftOutlook
Express5.0Mail

USER_ID correspond au nom de répertoire se trouvant dans :

C:Documents and SettingsNomDuProfilApplication DataIdentities
ou
%APPDATA%Identities

et à la forme d'un CLSID, par exemple :

{51D37B53-DEAF-458A-9D0D-D68EC6BE4835}

Quelques lignes de code sont donc nécessaires ...;-)

--
Cordialement,

Jacques.
Avatar
Jean-marc
Jacques93 wrote:
Bonjour Pascal,
Pascal a écrit :
Bonsoir Jean-Marc,
tu as mis exactement le doigt dessus, j'ai décoché et tout va
bien,j'aurais pû chercher longtemps!
Est-ce dur à coder de le faire par programmation ?
test si case cochée, on décoche, on envoie le mail, on recoche
je me dirige vers quoi pour faire cela?



Outlook Express n'exposant pas d'interface COM, il faut bidouiller le
registre. La clé correspondant à cette option est :

Warn on Mapi Send

de type REG_DWORD (0 = désactivé, 1 = activé) et se trouve dans

HKEY_CURRENT_USERIdentities{USER_ID}SoftwareMicrosoftOutlook
Express5.0Mail

USER_ID correspond au nom de répertoire se trouvant dans :

C:Documents and SettingsNomDuProfilApplication DataIdentities
ou
%APPDATA%Identities

et à la forme d'un CLSID, par exemple :

{51D37B53-DEAF-458A-9D0D-D68EC6BE4835}

Quelques lignes de code sont donc nécessaires ...;-)



Salut Jacques,

Amusant comme on a donné strictement la même réponse à
2 minutes d'intervalle, avec une formulation différente
mais 100% identique sur le fond :-)

Pascal => Au travail :-))

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Pascal
merci à vous deux pour ces excellentes réponses
je vais tenter
ps: on fait duo jean-marc et jacques93?
bon dimanche

"Jacques93" a écrit dans le message de news:
%
Bonjour Pascal,
Pascal a écrit :
Bonsoir Jean-Marc,
tu as mis exactement le doigt dessus, j'ai décoché et tout va
bien,j'aurais pû chercher longtemps!
Est-ce dur à coder de le faire par programmation ?
test si case cochée, on décoche, on envoie le mail, on recoche
je me dirige vers quoi pour faire cela?



Outlook Express n'exposant pas d'interface COM, il faut bidouiller le
registre. La clé correspondant à cette option est :

Warn on Mapi Send

de type REG_DWORD (0 = désactivé, 1 = activé) et se trouve dans

HKEY_CURRENT_USERIdentities{USER_ID}SoftwareMicrosoftOutlook
Express5.0Mail

USER_ID correspond au nom de répertoire se trouvant dans :

C:Documents and SettingsNomDuProfilApplication DataIdentities
ou
%APPDATA%Identities

et à la forme d'un CLSID, par exemple :

{51D37B53-DEAF-458A-9D0D-D68EC6BE4835}

Quelques lignes de code sont donc nécessaires ...;-)

--
Cordialement,

Jacques.


Avatar
Jacques93
Bonjour Jean-marc,
Jean-marc a écrit :
Jacques93 wrote:
Bonjour Pascal,




[...]
Salut Jacques,

Amusant comme on a donné strictement la même réponse à
2 minutes d'intervalle, avec une formulation différente
mais 100% identique sur le fond :-)

Pascal => Au travail :-))




Juré, craché, j'ai pas copié :-D

J'ai oublié, par contre, de mettre un lien sur la faq OE qui semble
confirmer la validité de nos réponses :-)

<http://www.faqoe.com/rep/dj.htm>

--
Cordialement,

Jacques.
Avatar
Jean-marc
Jacques93 wrote:
Bonjour Jean-marc,
Jean-marc a écrit :
Jacques93 wrote:
Bonjour Pascal,




[...]
Salut Jacques,

Amusant comme on a donné strictement la même réponse à
2 minutes d'intervalle, avec une formulation différente
mais 100% identique sur le fond :-)

Pascal => Au travail :-))




Juré, craché, j'ai pas copié :-D




C'est ce qui fait toute la beauté de la chose :-)


J'ai oublié, par contre, de mettre un lien sur la faq OE qui semble
confirmer la validité de nos réponses :-)

<http://www.faqoe.com/rep/dj.htm>



Joli :o)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Jacques93
"Pascal" a écrit dans le message de
news:
merci à vous deux pour ces excellentes réponses
je vais tenter
ps: on fait duo jean-marc et jacques93?
bon dimanche



Petite précision, au cas où, et pour l'avenir. Sous W2K et XP (donc avec
OE) les réponses de Jean-Marc et la mienne me semblent correctes.
Par contre sous Vista avec Windows Mail, plouf !!! comme quoi utiliser les
clés (ou fonctions, etc ...) non officiellement documentée
est toujours un peu risqué.
D'après ce que j'ai vu, le USER_ID existe toujours et se trouve dans
%APPDATA% , qui pointe sur :

C:UsersNomDuProfilAppDataRoaming

Le chemin est donc différent, mais cela sans conséquence, car la clé 'Warn
on Mapi Send' se trouve dans :

HKEY_CURRENT_USERSoftwareMicrosoftWindows MailMail

Le USER_ID n'est donc plus utilisé ici.

Attention toutefois. Par défaut cette clé n'existe pas par défaut, et si
elle n'existe pas c'est comme si
elle était cochée (donc à 1, logique MS sans doute). Elle n'apparait que si
on modifie les options de sécurité,
et a un comportement identique à OE.

NB : l'arborescence HKEY_CURRENT_USERIdentities{USER_ID} est vide
--
Cordialement,
Jacques.
Avatar
Jacques93
Jacques93 a écrit :



[...]

En complément de ce qui a déjà été dit, une méthode plus "générale"
serait peut être utile, cela dépend de ton environnement. Je m'explique:
la manip sur la clé 'Warn on Mapi Send', n'aurait, par exemple aucun
effet chez moi. Mapi utilise le gestionnaire de courrier par défaut, et
j'utilise Office Outlook ou Thunderbird, la clé en question ne concerne
que OE et Windows Mail. (Outlook Office intercepte aussi les envois de
courrier par d'autres programmes)

Une solution serait donc de tester quel est le gestionnaire de courrier
par défaut pour voir s'il est pertinent de modifier cette clé. On peut
le récupérer dans :

HKLMSOFTWAREClientsMail(par défault)

A titre d'exemple :

Messagerie Valeur par défaut
---------- -----------------
Office Outlook Microsoft Outlook
OE Outlook Express
TB Mozilla Thunderbird
WM Windows Mail

(j'en ai pas d'autre sous la main ;-) ).

Certaines de ces valeurs sont spécifique à un O.S. d'autres pas.
Et s'il est nécessaire de déterminer l'O.S. , ce qui peut être utile
dans d'autres circonstances, il y a le composant Sysinfo.ocx et ses
propriétés OSPlatform, OSVersion et OSBuild. Pour infos :


W2K SP4 XP SP2 VISTA (Ultimate)
--------------------------------------------------------
OSPlatform 2 2 2
OSVersion 5 5.01 6
OSBuild 2195 2600 6000

Si on désire plus de détails (Home Pro, Server, etc ...), il y a les API's :

<http://vbnet.mvps.org/index.html?code/helpers/iswinversion.htm>

NB : il y a une petite erreur. Initialiser à ncontrols à 35 et non pas
34

--
Cordialement,

Jacques.
1 2