|
Envoi de mails à l'aide de @MailSend et du LotusScript
par Yessif
|
Comment envoyer des e-mails sur le web?
Vous êtes nombreux à vous interroger sur la fonction @mailsend
ainsi que sur les possibilités d'envois d'e-mails comportant des liens
vers un document. Lors de mes expériences professionnelles, il m'a souvent
été donné d'aborder ce sujet. Je les ai réunies
dans cet article et afin d'être plus complet, j'ai apporté quelques
compléments issus de diverses documentations.
Cet article se divise en deux grandes parties. La première partie aborde
l ’envoi d e-mails sur le web sans document attaché. Dans la seconde partie,
nous nous intéresserons plus particulèrement à l’envoi
de mails comportant un document attaché.
Dans chacune des partie on verra dans quel cas il est plus judicieux d’utiliser
le langage de formules plutôt que le langage LotuScript.
Présentation des données :
Nous utilisons la version 5 de Notes. Les tests ont été
réalisés aussi bien sous IE que sous Netscape. Les mails ont été
envoyés vers des messagerie Notes ou Outlook (quelques différences dans la réception
seront précisées).
Nous utilisons un masque nommé M_Envoi
Ce masque comporte les champs suivants:
- Lien : champ texte
- Server_name : nom réservé d'une variable CGI; Ce champ texte
récupère automatiquement le nom du serveur sur lequel se trouve l'appliacation
(sinon il suffit de créer un champ dans lequel on code en dur le nom du serveur).
- Titre : champ texte
- Contenu : champ texte ou texte riche
- Destinataire : champ à valeur multiple
- Copie : champ à valeur multiple
- Ccopie : champ à valeur multiple
Une vue V_Document contiendra tous les documents crées avec le masque
M_Envoi.
1 - Envoi sans fichier attaché
1.1) - Utilisation de @mailsend
D ‘après mes tests, ceci ne marche que si le masque est en mode édition.
En mode lecture, il faut passer par des agents (dans ce cas autant éviter
d'utiliser un formulaire).
Dans un bouton ou une image avec une zone sensible,
ajouter la formule suivante :
@MailSend (ChampDestinataire;champ copie de destinataire;champ destinataire
caché; Champ titre ; Champ contenu )
explications :
i) Destinataires
les trois premiers paramètres
(ChampDestinataire, champ copie de destinataire, champ destinataire caché) représentent
les destinataires du message au sens des envois classiques de mail.
S’ils doivent reprendre les valeurs de champs dans le masque, mettre ces nom
sans accolade par contre si ce sont des adresses mails explicites, mettre ces
adresses entre guillemets (") et séparer les valeurs multiples par des deux
points (:).
ii) Contenu et Titre
Les deux derniers paramètres représentent respectivement le titre (souvent
appelé "Sujet") et le contenu du message envoyé.
Ils suivent les mêmes règles que celles des champs destinataires.
Exemple :
En utilisant les valeurs de notre masque M_envoi :on
aura :
@mailsend (Destinataire ;Copie ; Ccopie ; Titre ;
contenu)
Aucun paramètre n’est obligatoire. Il suffit d'écrire une chaîne
de texte vide ("") si on ne veut pas renseigner le champ.
Ainsi; il suffit d'écrire la formule suivante pour envoyer son mail
sans destinataires en copie cachée:
@mailsend (Destinataire ;Copie ;""; Titre ; contenu)
Dans cet autre exemple, certains paramétres ont été codés
en dur dans la formule. Notez l'usage des deux points pour la séparation
des valeurs multiples:
@mailsend (Destinataire ;Copie ;" admin@dominoreference.fr" :
" joe@dominoreference.fr" ; "Souvenir Vacances" ;
contenu)
1.2) - Envoi de mails en LotusScript
D ‘après mes tests, ceci marche aussi bien en mode «édition» qu’en
mode «lecture» du document.
Dans un bouton ou une image avec une zone sensible,
ajouter la formule suivante :
@Command([ToolsRunMacro]; "Courrier") : on fait appel
à un agent en back end (s’exécutant sur le serveur) qui va envoyer le courrier.
i) configuration de l’agent
Créer un agent qui a les propriétés suivantes :
Nom :Courrier
Agent partagé
Quand doit il être exécuté : Lorsque vous le sélectionnez dans
la liste des agent
Quels documents doit il traiter : Exécuter une fois (commandes
@ autorisées)
ii) contenu de l’agent
dans Initialize mettre le code suivant
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim docweb As NotesDocument ‘récupérera les valeurs du document ouvert
Dim docmail As notesdocument ‘document à envoyer
Dim destinataires(1 à 3 ) As String ‘ un tableau des destinataires
‘Initialisation
Set db = session.currentdatabase
Set docweb = session.DocumentContext ‘ le document ouvert ici M_Envoi
Set docmail=db.createdocument ‘ création du document à envoyer
' RMQ: on suppose que dans chaque champ on a un seul destinataire
destinataires( 1 ) = docweb.Destinataire(0)
destinataires( 2 ) = docweb.Copie(0)
destinataires( 3 ) = docweb.Ccopie(0)
docmail.Subject = docweb.Titre(0)
docmail.Body = docweb.Contenu(0)
Call docmail.Send( False, destinataires )
End Sub
On peut aussi mettre tous les champs en dur ou encore faire des combinaisons :
destinataires( 2 ) = "domino-dev@wanadoo.fr"
ou alors docmail.Subject = docweb.Titre(0) & " (a lire absolument) "
Evidemment l’envoi de mail via LotuScript peut être mis dans un agent sophistiqué
avec utilisation de boucle pour remplir le tableau des destinataires déclaré
en variable par exemple. Ici ne sont présentés que les aspects généraux de
cette fonction. L’aide de Designer est à ce sujet assez explicite.
Ceci termine notre première partie. Nous allons voir maintenant comment envoyer
des mails avec lien vers le document sur le web.
2 -Envoi avec un fichier attaché
2.1) - @mailsend
L’envoi est identique que pour la première partie,
mais dans le corps du document, il faut rajouter une information «lien »
vers le document
La syntaxe est la suivante :
@MailSend (ChampDestinataire;champ copie de destinataire;champ destinataire
caché; Champ titre ; Champ contenu +@newline+LIEN)
LIEN est un champ ou une valeur calculée qui est de la forme suivante :
"http://" + server_name + @ReplaceSubstring (@Trim ("/"
+ @ReplaceSubstring(@Subset(@DbName;-1);"\\";"/")+"/");"";"+")
+ "V_Document/" + @Text(@DocumentUniqueID) + "?OpenDocument"
(bien vérifier que tous les éléments de cette chaîne sont de type text sinon
faire @text(element))
Avant l’exécution du @mailsend il faut que le document existe car
comme vous le voyez bien on fait appel au @DocumentUniqueID qui n’est crée qu’au
moment de l’enregistrement.
Dans le bouton il faut donc un @Command([FileSave]); avant le @mailsend.
2.2) - Send de lotuscript
Ceci marche aussi bien sur les documents existant que sur ceux qui sont en
cours de création, il faut les enregistrer avant de faire appel à l’agent.
On garde les même hypothèses que dans la partie I.
Le script de l’agent est le suivant :
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As notesview
Dim docweb As NotesDocument ‘récupérera les valeurs du document ouvert
Dim doc, docmail As NotesDocument
Dim destinataires( 1 To 3 ) As String
Set db = session.currentdatabase
Set docweb= session.documentcontext
url$=db.filepath ‘le chemin (nom du serveur et nom de la base)
unid$ = doc.UniversalID ‘(récupération de l’id du document)
Set docmail=db.createdocument
destinataires( 1 ) = docweb.Destinataire(0)
destinataires( 2 ) = docweb.Copie(0)
destinataires( 3 ) = docweb.Ccopie(0)
docmail.Subject = docweb.Titre(0)
docmail.Body = "Veuillez approuver la demande suivante : " + Chr$(13) +"http://"
+ url$ + "/V_Document/" + unid$ + "?OpenDocument";
Call docmail.Send( False, destinataires )
End Sub
Rmq:Chr$(13) permet d'ajouter un retour à la ligne.
Remarques
Générales :
Le lien du @mailsend reçu dans une boite Note parfois ne s’affiche pas sous
forme de lien , il faut faire un foward pour l’avoir sous forme de lien. Par
contre il marche quand on utilise le send.
Ce problème ne se pose pas sous IE ou Netscape.
Voilà tout ce que j’avais à vous dire sur ma pratique de l’envoi de mail.
J’espère que cela servira à certain. Merci de m’envoyer vos remarques d’améliorations
ou de problèmes rencontrés.
Yessif : kankarti@yahoo.com.
|