Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Lotus Notes
Lotus Notes Forum d'entraide sur le logiciel de travail collaboratif Lotus Notes
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/11/2011, 16h12   #1
Membre Expert
 
Homme Michel
Ingénieur développement logiciels
Inscription : mai 2005
Messages : 1 584
Détails du profil
Informations personnelles :
Nom : Homme Michel
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2005
Messages : 1 584
Points : 2 143
Points : 2 143
Par défaut [VBA + Lotus v 6.5] Ajouter les infos Entetes au nom de l'expediteur

Bonjour ,
J'envoie des mails Lotus Notes (v 6.5) en VBA depuis Access 2003.
via la fonction ci-après
Code :
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Private Sub SendLotusNotesMail(SendTo() As Variant, _
                               CopyTo() As Variant, _
                               bSaveIt As Boolean, _
                               Optional sSubject As String, _
                               Optional sBody As String, _
                               Optional arrAttachment As Variant)
    On Error GoTo Err_Handler

    ' Initialisation des objets
    Dim sMsg As String
    Dim Maildb As Object    'The mail database
    Dim UserName As String    'The current users notes name
    Dim MailDbName As String    'THe current users notes mail database name
    Dim MailDoc As Object    'The mail document itself
    Dim AttachME As Object    'The attachment richtextfile object
    Dim Session As Object    'The notes session
    Dim EmbedObj As Object    'The embedded object (sAttachment)

    ' Start a session to notes
    Set Session = CreateObject("Notes.NotesSession")
    ' Get the sessions username and then calculate the mail file name
    ' You may or may not need this as for MailDBname with some systems you
    ' can pass an empty string
    UserName = Session.UserName
    MailDbName = Left$(UserName, 1) & Right$(UserName, (Len(UserName) - InStr(1, UserName, " "))) & ".nsf"
    ' Open the mail database in notes
    Set Maildb = Session.GetDatabase("", MailDbName)

    If Not Maildb.IsOpen Then
        Maildb.OPENMAIL
    End If

    'Set up the new mail document
    Set MailDoc = Maildb.CreateDocument
    MailDoc.Form = "Memo"
    MailDoc.PostedDate = Now
    MailDoc.SendTo = SendTo
    MailDoc.Subject = sSubject
    MailDoc.CopyTo = CopyTo

    MailDoc.SaveMessageOnSend = bSaveIt
    'Set up the embedded object and sAttachment and attach it
    If arrAttachment(0) <> "" Then
        Set AttachME = MailDoc.CREATERICHTEXTITEM("Attachment")
        Set EmbedObj = AttachME.EmbedObject(1454, "", arrAttachment(0), "Attachment")
    End If
     If arrAttachment(1) <> "" Then
        Set AttachME = MailDoc.CREATERICHTEXTITEM("Attachment1")
        Set EmbedObj = AttachME.EmbedObject(1454, "", arrAttachment(1), "Attachment1")
    End If

    CreateBody Session, MailDoc, sBody

    'Send the document
    MailDoc.Send 0, SendTo

Exit_0:
    Set Maildb = Nothing
    Set MailDoc = Nothing
    Set AttachME = Nothing
    Set Session = Nothing
    Set EmbedObj = Nothing
    Exit Sub

Err_Handler:
    ' sMsg = err.Description & vbCrLf & vbCrLf & "Assurez-vous d'avoir LOTUS NOTES démarré puis recommencez l'opération!"
    ' MsgBox sMsg, vbCritical, "Erreur n°" & err.Number & " dans la fonction 'SendLotusNotesMail'"
    ' err.Raise vbObjectError + 512
    Resume Exit_0

End Sub
Les mails partent bien directement.
Mais le probléme est que les informations relatives à l'expéditeur manquent sur le mail reçu
alors qu'elles figurent lorsque le mémo est envoyé manuellement par ce même expéditeur.

En plus clair :
Au début d' un mail reçu, envoyé manuellemnt :
M. Michel DUPONT
Service des Pompes : Ces infos figurent dans Préférences/ Entête
Département MMMMM
6 rue des Iles
...
18H15

alors qu'au début d'un mail que j'envoie via VBA :
Michel Dupont
18H15

Merci aux lecteurs
__________________
"tout le monde veut sauver la planète, mais personne ne veut descendre les poubelles." J Yanne
micniv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 10h33   #2
Membre confirmé
 
Avatar de Mandraxx
 
Homme
Architecte de système d'information
Inscription : mai 2011
Messages : 133
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France, Gers (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Conseil

Informations forums :
Inscription : mai 2011
Messages : 133
Points : 264
Points : 264
Bonjour,

La différence de comportement est certainement due à l'absence d'une couche logicielle.

Je m'explique : vous utilisez le composant ActiveX
Code :
Set Session = CreateObject("Notes.NotesSession")
Donc, vous attaquez directement l'API Notes et vous créez un document dans la base de l'utilisateur puis vous l'envoyez.

D'un point de vue système, tout cela est tout à fait correct (c'est pourquoi le mail est routé correctement) mais d'un point de vue fonctionnel, tout le code contenu dans le design de la base mail de l'utilisateur n'est pas exécuté contrairement à l'envoi manuel qui est fait depuis une action de la base mail.

Ça c'est le symptôme ...


Pour la solution, il faut comprendre ce qu'il manque dans le message, a priori, certains champs qui ne sont pas initialisés correctement.
En regardant d'un peu plus près le design d'un modèle de base mail, on voit que le code de la commande Nouveau Message est simplement constitué par la ligne suivante :
Code :
@Command([Compose]; "Memo")
.

A mon avis, il y a donc deux pistes à creuser :
  1. Comparer champ à champ les deux documents (celui envoyé programmatiquement et celui envoyé manuellement) pour déterminer quelles informations il faut rajouter C'est long, fastidieux, mais je pense que ça va marcher avec beaucoup de patience et d'huile de coude.
  2. Essayer de composer le message, de le sauver en brouillon puis de lancer la commande
    Code :
    ToolsRefreshSelectedDocs
    qui permet de recalculer les champs en utilisant le code du masque de document. Théoriquement, ça devrait aller chercher les infos manquantes dans les docs profils et compléter votre message. Mais techniquement, je ne sais pas si c'est faisable depuis du VBA, surtout si l'UI n'est pas disponible .
Bon courage en tous cas.

@+
__________________
Le choix motivé par le seul argument de modernité est intrinsèquement dépourvu de créativité.
Mandraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 07h48   #3
Membre Expert
 
Homme Michel
Ingénieur développement logiciels
Inscription : mai 2005
Messages : 1 584
Détails du profil
Informations personnelles :
Nom : Homme Michel
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2005
Messages : 1 584
Points : 2 143
Points : 2 143
Merci pour cette réponse très bien argumentée et pour les pistes indiquées.
je m'en vais les étudier.
A+
__________________
"tout le monde veut sauver la planète, mais personne ne veut descendre les poubelles." J Yanne
micniv est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h45.


 
 
 
 
Partenaires

Hébergement Web