Agent :qui limitela taille des messages en receptions sur qu

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

Agent :qui limitela taille des messages en receptions sur qu

Messagepar BigJim » 13 Jan 2004 à 17:32

Bonjour à tous, Tout d´abord merci pour ce forum francophone qui est une mine d´or. J´ai cherché sur le forum une solution mais sans succès. Je souhaite créer un agent partagé, implémenté dans un nouveau template du modèle de courier mail50.ntf, qui limiterait la réception des messages dont la taille seraient supérieures à 2Mo. L´agent doit renvoyer ensuite un message à l´expéditeur lui indiquant que son message est trop volumineux. Je ne peux pas utiliser les parametres du serveur concernant la limitations de taille des messages entrant au niveau SMTP car cela impacterait tous les utilisateurs. Alors que là, il s´agit d´affecter cette restriction sur un nouveau template à une 50aine de BAL sur 500. Ces 50 utilisateurs étant des nomages avec des HP Jornada sous Windows CE, qui récupèrent les mails via Pop3. J´ai essayé via des actions simples, impossible car il n´y pas de controle sur la taille des fichiers entrant pour faire la selection de l´agent. Même chose avec les regles directement dans le client Notes, là on a la taille comme critere, mais on ne peux pas envoyer de message à l´expéditeur...Grrrrr J´ai trouvé sur le forum Notes.net ce début de lotusscript qui controle la taille des messages, mais n´étant pas developpeur (malheureusement), il me manque toute la partie suppression du message et expédition du message d´avertissement à l´expéditeur. Voilà, j´espère que vous pourrez m´aider. D´avance merci Jérôme Script trouvé : Dim session As NotesSession Dim note As NotesDocument Set session = New NotesSession Set note = session.DocumentContext If (Not note Is Nothing) Then If (note.Size < 2000000) Then .... End If End If
BigJim
 

Re: Agent :qui limitela taille des messages en receptions su

Messagepar Oguruma59 » 13 Jan 2004 à 18:06

est-ce urgent ? je te le fais clean...laisse moi 24h environ et tu as un truc top (enfin j''espère)(là le msieur y s'engage...)ceci dit, il faudra par la suite modifier la structure des base mail concernées et jongler avec les modèles NTFsais-tu faire ?je vais essayer de te faire une base courrier d'exemple celle-ci sera dotée d'un document profile dans lequel tu pourras fixer la taille limite afin de ne pas intervenir dans le code si des modifs sont demandées et également la possibilité de paramétrer oui/non l'éxécution de l'agent dans la dite base mailje te donnerai la mise en production de tout ceci
Oguruma59
 

Re: Agent :qui limitela taille des messages en receptions su

Messagepar Oguruma59 » 14 Jan 2004 à 09:27

j'ai avançé sur le sujet... le plus simple... je te mets la base sur ton email yahoo ou si tu en as un autre laisse le icije peux te fournir une base modèle d'ici ce soirpour ceux qui souhaitent le code ou la base je peux leur envoyer égalementje laisserai un post dans ce forum avec les sources pour les développeurs avertis
Oguruma59
 

1/ Création du nouveau modèle de base courrier

Messagepar Oguruma59 » 14 Jan 2004 à 11:05

* charger sur le desktop la base mail50.ntf* recopier celle-ci avec le client notes et lui donner le nom stemail50.ntf (ou tout autre nom)* partir de la base stemail50.ntf, propriété de la base 4ème onglet* hériter la structure du modèle mettre StdR50Mail* la base est un modèle, nom du modèle steStdR50Mail
Oguruma59
 

2/ Création du masque profil

Messagepar Oguruma59 » 14 Jan 2004 à 11:06

* avec designer créer un masque nommé (ProfilCheck)Informations de masqueNom : (ProfilCheck)>Champ : steActifType de données : Mots-clésInterface utilisateur mot-clé : Boutons radioMots-clés disponibles : Oui, NonFormule de valeur par défaut : "Oui">Champ : steSeuilType de données : NombreFormat de nombre : Fixe (0 décimales)Type de champ : Modifiable>Champ : steMsgType de données : TexteType de champ : Modifiable
Oguruma59
 

3/ créer un agent permettant de mettre à jour le profil

Messagepar Oguruma59 » 14 Jan 2004 à 11:07

Nom : Profil de vérification des messagesAgent partagé : OuiType : FormuleEtat : Activé(e)Déclencher : Lorsque vous le sélectionnez dans le menu Actions.S'applique à : Exécuter une fois (commandes @ autorisées)Formule : @Command([EditProfile]; "(ProfilCheck)");
Oguruma59
 

4/ développer l'agent

Messagepar Oguruma59 » 14 Jan 2004 à 11:08

Synopsis de base de documents Lotus Notes - créé à 10:54:39 le 14/01/2004Informations d'agentNom : $CheckMailSizeDernière modification : 14/01/2004 10:37:24Commentaire : [Sans]Agent partagé : OuiType : LotusScriptEtat : Activé(e)Déclencher : Avant l'arrivée de courrierS'applique à : Chaque document courrier entrantCode LotusScript :Option PublicUse "ClassMail"%REMCet agent a pour but de contrôler la taille des messages. Si celui-ci est activé dans son document profil, le messagesera rejeté s'il a atteint le seuil fixé dans le profil.%END REMDim session As NotesSessionDim dbMail As NotesDatabaseDim view As NotesViewDim docProfile As NotesDocumentDim docContext As NotesDocumentDim docMail As NotesDocumentSub Initialize '// lancement de l'agent Dim ok As Integer On Error Goto errHandler Call initCommon '// A-t-on activer l'agent ? If docProfile.steActif(0)="Non" Then Exit Sub '// On procéde donc à son analyse If Not analyzeMail() Then Print "Incident pendant l'analyse des messages reçus..." Else Print "Traitement des messages reçus correctement effectué" End If Exit SuberrHandler: Print "Erreur n ° ";Err;" : ";Error$;" - ";Erl;" (Initialize)" Resume finfin:End SubSub initCommon '// Initialisation des objets communs à l'agent On Error Goto errHandler Set session=New NotesSession Set dbMail=session.CurrentDataBase '// ici on récupère le document reçu afin de le traiter à l'issue Set docContext=session.DocumentContext '// on récupère les paramètres enregistrés dans le profil Set docProfile=dbMail.GetProfileDocument( "(ProfilCheck)" ) Exit SuberrHandler: Print "Erreur n ° ";Err;" : ";Error$;" - ";Erl;" (initCommon)" Resume finfin:End SubFunction analyzeMail() As Integer '// Fonction chargée d'analyser la taille du message reçu Dim seuil As Long On Error Goto errHandler seuil=docProfile.steSeuil(0) Print "Seuil à ne pas dépasser : ";Seuil Print "Taille du message : ";docContext.Size Print "Message envoyé par : ";docContext.From(0) '// Si le seuil est atteint If docContext.Size>=seuil Then '// On supprime le document If Not ejectMail() Then Print "Incident pendant la tentative de suppression du message" analyzeMail=False Else Print "Message de ";docContext.From(0);" supprimé avec succés" '// On informe son émetteur If Not alertSender() Then Print "Impossible d'informer l'expéditeur ";docContext.From(0) Else Print docContext.From(0);" a bien été informé que son message a été rejeté" End If End If End If '// Tout s'est bien passé analyzeMail=True Exit FunctionerrHandler: Print "Erreur n ° ";Err;" : ";Error$;" - ";Erl;" (analizeMail)" analyzeMail=False Resume finfin:End FunctionFunction ejectMail() As Integer '// Fonction chargée de supprimer le message On Error Goto errHandler '// on supprime le document Call docContext.Remove(True) ejectMail=True Exit FunctionerrHandler: Print "Erreur n ° ";Err;" : ";Error$;" - ";Erl;" (ejectMail)" ejectMail=False Resume finfin:End FunctionFunction alertSender() As Integer '// Fonction chargée d'avertir l'expéditeur du message On Error Goto errHandler Dim msg As Mail Dim texte(0) As String Set msg=New Mail() msg.Subject="REFUS : "+docContext.Subject(0) texte(0)=docProfile.steMsg(0) Call msg.SetRecipients(docContext.From(0),Null,Null) Call msg.SetBody(texte) '// on vérrouille si l'utilisateur souhaite répondre... msg.Principal=dbMail.Server msg.ReplyTo="No reply" Call msg.Send(False) Delete msg '// On alerte aussi le propriétaire du la base mail If Not alertMe() Then Print "Impossible de déposer un message dans boîte à lettres du propriétaire" alertSender=False Else alertSender=True End If Exit FunctionerrHandler: Print "Erreur n ° ";Err;" : ";Error$;" - ";Erl;" (alertSender)" alertSender=False Resume finfin:End FunctionFunction alertMe() As Integer '// Fonction chargée d'avertir le propriétaire de la bàl On Error Goto errHandler Dim rtitem As NotesRichTextItem Dim docMailMe As NotesDocument '// On prépare le message pour le déposer dans le dossier courrier arrivé Set docMailMe=dbMail.createdocument docMailMe.Subject="REFUS de : "+docContext.Subject(0) '// corps du message Set rtitem = docMailMe.CreateRichTextItem("body") Call rtitem.appendText (docContext.From(0)+" vous a envoyé un message trop volumineux, nous l'avons rejeté. ") Call rtitem.appendText (Chr$(13)+Chr$(10)) Call rtitem.appendText ("Veuillez prendre de nouveau contact avec cet utilisateur.") Call rtitem.appendText (Chr$(13)+Chr$(10)) Call rtitem.appendText (Chr$(13)+Chr$(10)) Call rtitem.appendText ("Cordialement. ") Call rtitem.appendText (Chr$(13)+Chr$(10)) Call rtitem.appendText ("Les Administrateurs") '// ici les composants systèmes du message docMailMe.from="Administrateurs" docMailMe.SendTo="A votre intention" docMailMe.replyTo="Administrateurs" docMailMe.DeliveredDate=Now docMailMe.PostedDate=Now docMailMe.RouteServers=dbMail.Server docMailMe.RouteTimes=Now docMailMe.SMTPOriginator=dbMail.Server '// sauvegarde dans les dossier courrier arrivé Call docMailMe.save(True,False) Call docMailMe.PutInFolder("($Inbox)") alertMe=True Exit FunctionerrHandler: Print "Erreur n ° ";Err;" : ";Error$;" - ";Erl;" (alertMe)" alertMe=False Resume finfin:End Function
Oguruma59
 

5/ créer la lib ClassMail

Messagepar Oguruma59 » 14 Jan 2004 à 11:08

Synopsis de base de documents Lotus Notes - créé à 10:56:32 le 14/01/2004Informations de bibliothèque de codesNom : ClassMailDernière modification : 13/01/2004 23:36:21Code LotusScript :Option PublicPublic Class Mail Private MailSession As NotesSession Private MailDB As NotesDataBase Private MailDoc As NotesDocument Private RTBody As Variant Private RS As Variant Private ItemSendTo As NotesItem Private ItemCopyTo As NotesItem Private ItemBlindCopyTo As NotesItem Public Sub new Set MailSession=New NotesSession Set MailDB = MailSession.CurrentDataBase Set MailDoc=New NotesDocument(MailDB) Set RTBody = MailDoc.CreateRichTextItem( "Body" ) Set RS=MailSession.CreateRichTextStyle MailDoc.Form="Memo" End Sub Public Sub SetRecipients(SendTo As Variant, CopyTo As Variant, BlindCopyTo As Variant) Set ItemSendTo = New NotesItem( MailDoc, "SendTo", SendTo ) Set ItemCopyTo = New NotesItem( MailDoc, "CopyTo", CopyTo ) Set ItemBlindCopyTo = New NotesItem( MailDoc, "CopyTo", BlindCopyTo ) End Sub Public Property Set Subject As String MailDoc.Subject=Subject End Property Public Property Set ReturnReceipt As Integer MailDoc.ReturnReceipt=ReturnReceipt End Property Public Sub SetBody(Body As Variant) If Isarray(Body) Then Forall T In Body Call RTBody.AppendText( T ) Call RTBody.AddNewLine(1) End Forall Else Call RTBody.AppendText( Body ) Call RTBody.AddNewLine(1) End If End Sub Public Sub SetDocLink(Msg As String,DocLink As NotesDocument) Call RTBody.AddNewLine(1) Call RTBody.AppendText( Msg ) Call RTBody.AppendDocLink( DocLink, MailDoc.Subject(0)) End Sub Public Sub SetDocLinkDB(Msg As String,DocLink As NotesDataBase) Call RTBody.AddNewLine(1) Call RTBody.AppendText( Msg ) Call RTBody.AppendDocLink( DocLink, MailDoc.Subject(0)) End Sub Public Sub SetAttachement(F As Variant) If Isarray(F) Then Forall Attached In F Call RTBody.EmbedObject( EMBED_ATTACHMENT, "", Attached) End Forall Else Call RTBody.EmbedObject( EMBED_ATTACHMENT, "", F) End If End Sub Public Property Set Principal As String MailDoc.Principal=Principal End Property Public Property Set ReplyTo As String MailDoc.ReplyTo=ReplyTo End Property Public Sub SetColor(Color As Variant) RS.NotesColor=Color Call RTBody.AppendStyle(RS) End Sub Public Sub SetBold(isBold As Integer) RS.Bold=isBold Call RTBody.AppendStyle(RS) End Sub Public Sub SetItalic(isItalic As Integer) RS.Italic=isItalic Call RTBody.AppendStyle(RS) End Sub Public Sub Send(isSave) Call MailDoc.Send( isSave ) End Sub Public Sub Delete Set MailDoc=Nothing Set MailSession=Nothing Set MailDB=Nothing Set RTBody=Nothing Set RS=Nothing End Sub End Class
Oguruma59
 

6/ mise en production

Messagepar Oguruma59 » 14 Jan 2004 à 11:17

Je préconise une mise en production sur une base de mail de test et y compris une base test nommade.Il faut changer le modèle logique de chaque base mail et faire référence à steStdR50Mail.Sur la base serveur, il faut procéder à une mise à jour de structure... pas remplacement !(fichier/base de documents/mettre à jour structure) ou laisser la tâche Design du serveur (la nuit à 01h00 par défaut)il faut aussi intervenir sur la sécurité du serveur et autoriser les utilisateurs à lancer les script LSfiche serveur du carnet d'adresses, onglet sécurité et mettre les utilisateurs concernés dans les zonesExécuter les agents LotusScript/Java restrictifs et Exécuter les agents LotusScript/Java non restrictifs(il est préférable de cibler ces utilisateurs à travers un groupe)il faut signer ensuite l'agent avec l'ID du serveur de manière à avoir accès à la base mail et pouvoir y déposer le courrierdans le dossier ($inbox) - faire cela avec le client notes du serveurAttention : pour le déploiement, bien vérifier que le serveur est gestionnaire sur les bases serveurAfin que les utilisateurs n'aient pas accès aux nouveau code implémenter, ne pas répliquer le code, formules et script car les opérations ont lieu sur le serveur, inutile d'encombrer leur base mail.Ensuite il faut charger chaque base mail concernée et paramétrer le document profil de manière à autoriser l'agent, fixer le seuil et mettre le message d'accompagnement qui sera envoyé à l'expéditeur du message.Pour vos aider mon modèle NTF aura des valeurs par défaut dans ce profil.enfin... pour vous éviter les opérations 1 à 5 j'ai cette base modèle à votre dispostion pour ceux qui la désirentle code est largement documenté et les novices en LS pourront s'initier et maintenir celui-ciJ'espère avoir répondu à ta question... y plus qu'à....
Oguruma59
 

6/ mise en production

Messagepar Oguruma59 » 14 Jan 2004 à 11:17

Je préconise une mise en production sur une base de mail de test et y compris une base test nommade.Il faut changer le modèle logique de chaque base mail et faire référence à steStdR50Mail.Sur la base serveur, il faut procéder à une mise à jour de structure... pas remplacement !(fichier/base de documents/mettre à jour structure) ou laisser la tâche Design du serveur (la nuit à 01h00 par défaut)il faut aussi intervenir sur la sécurité du serveur et autoriser les utilisateurs à lancer les script LSfiche serveur du carnet d'adresses, onglet sécurité et mettre les utilisateurs concernés dans les zonesExécuter les agents LotusScript/Java restrictifs et Exécuter les agents LotusScript/Java non restrictifs(il est préférable de cibler ces utilisateurs à travers un groupe)il faut signer ensuite l'agent avec l'ID du serveur de manière à avoir accès à la base mail et pouvoir y déposer le courrierdans le dossier ($inbox) - faire cela avec le client notes du serveurAttention : pour le déploiement, bien vérifier que le serveur est gestionnaire sur les bases serveurAfin que les utilisateurs n'aient pas accès aux nouveau code implémenter, ne pas répliquer le code, formules et script car les opérations ont lieu sur le serveur, inutile d'encombrer leur base mail.Ensuite il faut charger chaque base mail concernée et paramétrer le document profil de manière à autoriser l'agent, fixer le seuil et mettre le message d'accompagnement qui sera envoyé à l'expéditeur du message.Pour vos aider mon modèle NTF aura des valeurs par défaut dans ce profil.enfin... pour vous éviter les opérations 1 à 5 j'ai cette base modèle à votre dispostion pour ceux qui la désirentle code est largement documenté et les novices en LS pourront s'initier et maintenir celui-ciJ'espère avoir répondu à ta question... y plus qu'à....
Oguruma59
 

alternative

Messagepar Oguruma59 » 14 Jan 2004 à 12:58

en lieu et place de créer un document profil dans la base mail de l'utilisateur, on peut créer une base notes "à part" qui serait chargée de piloter le vérrouillage des bases mail souhaitées.En effet cette base aurait un document profil par base courrier. Elle disposerait des champs supplémentaires :Nom de l'utilisateurNom de sa base mailID de réplique de la base mailElle serait composée de deux vues- une vue pour le paramétrage avec en première colonne le nom de l'utilisateur- une vue cachée avec en première colonne l'ID de réplique de la base courrierL'agent accèderait au profil via l'ID de réplique de la base.Le reste du traitement est inchangé.Allez, je veux bien vous faire vite fait (pour bigjim) cette base de paramètrage et apporter les modifications nécessaires à l'agent.Mais bon, pour les développeurs avertis il n'y a rien de compliqué...
Oguruma59
 

Re: alternative

Messagepar BigJim » 15 Jan 2004 à 11:23

OuaaaahhhhhhAlors là je suis bleuffé.Prendre autant de temps pour répondre, c'est vraiment top de ta part.Merci pour tous tes conseils, si j'avais lu ta première réponse hier je t'aurai éviter tout le discours sur la notion de modèle, mise à jour de structure, etc....mais cela servira à d'autres.Je vais mettre en oeuvre ta solution, et te tiens au courant rapidoEncore merci pour ton aideBigJim
BigJim
 

Re: alternative

Messagepar Oguruma59 » 15 Jan 2004 à 12:53

oui en effet bcp de "débutants" avec tous mes respects modifient en dur les modèles fourni ou les bases de doc...et la maj de serveur tombe... les larmes coulent car on a perdu les modif apportées dans le modèle... bref on se fait prendre une fois à ce jeu après on fait comme les grandbon c'était pour rire...je te fais la petite base comme promis si tu la veux je te mail tout cela... dans un mail, elle est cours de finalisationsi tu es preneur laisse ton email...
Oguruma59
 

Re: alternative

Messagepar BigJim » 15 Jan 2004 à 13:51

Non c'est bon pour la base.J'utilise déjà un modèle spécifique pour ces utilisateurs. Je vais la modifier pour prendre en compte ton script.Encore merciBigJim
BigJim
 

Re: alternative

Messagepar Oguruma59 » 15 Jan 2004 à 14:01

la base extérieure pour la gestion des profils est OK, j'ai modifié mon code je le post pour ceux ici qui le souhaitepour ceux qui souhaitent le package complet => je peux le mailer sans pbjuste un petit pb : pour récup automatiquement l'id de réplique au moment de la construction du document de paramétrage dans la base profil il faut avoir accès à la base courrier de l'utilisateur ou alors faire ce paramètrage à partir du client notes du serveur pour accèder à la base avec l'id serveur ou se connecter avec l'id serveur sur sa station distante si on est eloigné de la salle machine
Oguruma59
 

Suivant

Retour vers Développement

cron