Domino Références : Site francophone de ressources pour les développeurs Lotus Notes / Domino Domino Références
Site francophone de ressources pour les développeurs Notes/Domino
Annuaire Articles Forums Contact
Recherche
 
Mot exact résultats
Au Sommaire ...
Annuaire commenté des sites traitant de Lotus Notes/Domino
Articles d'actualité
Les forums de discussion
Une remarque, une critique, un encouragement. N'hésitez pas à me contacter.
The Team that meets in Forum.
Newsletter
email:   
s'abonner se désabonner 
Statistiques
 Stats du site

 

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.

Mise à jour: 18/09/2003
Conception: Lionel, 2001-2002