En résumé : refuser un courrie important (taille)

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

En résumé : refuser un courrie important (taille)

Messagepar oguruma » 16 Jan 2004 à 22:52

Ce poste fait l'objet d'une synthèse suite aux différents échanges afin de refuser un courrier trop volumineux pour certaines personnes.Dans ce forum j'ai eu différents échanges, avis avec BigJim afin de ne pas trop noyer les lecteurs de ce forum voici donc la version définitive de la solution.Elle repose sur la présence d'un fichier .INI dans un répertoire dédié du serveur Notes ; ce répertoire est codé en dur dans l'agent (module initCommon) c:\lotus\domino\data\chkmail.Ce fichier doit porter le nom de la base mail de l'utilisateur suivi de l'extension .INI (ex aperso.ini).La structure du fichier est la suivante :ligne 1 : Oui/Non (agent actif)ligne 2 : seuil à ne pas dépasser (2000000)et les lignes suivantes le corps du message pour alerter l'expéditeur(il n'y a pas de limite, 5 lignes devraient convenir largement)Ci-dessous le synop de l'agent Je peux fournir à ceux qui le désirent une base mail "zippée" avec le code de l'agent. Celle-ci pourra servir à la constitution d'un modèle en cascade (voir mon post à ceux sujet).Pour ceux qui auraient des idées pour optimiser cette solution, je suis bien entendu preneur.Bonne installation à tous.Synopsis de base de documents Lotus Notes - créé à 22:18:27 le 15/01/2004Informations d'agentNom : $CheckMailSizeDernière modification : 15/01/2004 21:52:12Commentaire : [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.Il présente trois modes de fonctionnement et celui retenu a été le 3ème- Le premier s'appuie sur un document profil enregistré dans la base courrier de l'utilisateur. Cette première méthodebien que simple laisse la possibilité à l'utilisateur de modifier ce document.- Le deuxième recherche le document profil enregistré dans une base extérieure. L'administrateur Lotus Notes doit avoiraccès à la base mail de l'utilisateur pour créer le document de paramétrage. Par contre, cette solution sécurise l'applicationet l'utilisateur ne peut pas intervenir.- Le troisième est fondé sur la présence d'un fichier INI qui joue le rôle de document profil. Il est enregistré dans lerépertoire c:\lotus\domino\data\chkmailAttention : Ce nom de répertoire est enregistré en dur dans le code.Le fichier INI doit correspondre au nom de la base mail de l'utilisateur + l'extension .INIFormat du fichier--------------------------1ère ligne : Oui/Non (agent actif)2ème ligne : seuil (2000000)à partir de la 3ème autant de lignes que l'on souhaite pour le corps du messageexemple :Oui2000000Nous avaons rejeté votre message.Celui-ci est trop important pour être traité par notre messagerie.Vous remerciant pour votre compréhension,Cordialement,L'administrateurs Lotus Notes.%END REMConst PARAMDB="STECHKMAIL.NSF"Const VUEDBID="VDBID"Const EXTINI=".INI"Dim session As NotesSessionDim dbMail As NotesDatabaseDim dbParam As NotesDataBaseDim view As NotesViewDim viewDbID As notesviewDim docProfile As NotesDocumentDim docContext As NotesDocumentDim docMail As NotesDocumentDim fichierINI As StringDim noFileINI As IntegerDim actif As IntegerDim seuil As LongDim texte As VariantDim stopAgent As IntegerSub Initialize '// lancement de l'agent Dim ok As Integer On Error Goto errHandler Call initCommon If stopAgent Then Exit Sub '// code pour la V3 '//-------------------------- If noFileINI Then Exit Sub If Ucase$(actif)="NON" Then Exit Sub%REM Ce code est pour la version 1 et 2 ------------------------------------------------------ If docProfile Is Nothing Then Print "aucun document profil pour cette base" Exit Sub End If // A-t-on activer l'agent ? If docProfile.steActif(0)="Non" Then Exit Sub %END REM '// 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 Dim k As Integer Dim ligne As String '// Initialisation des objets communs à l'agent On Error Goto errHandler Set session=New NotesSession Set dbMail=session.CurrentDataBase '// Construction du fichier INI (version 3) fichierINI=dbMail.FileName Mid$(fichierINI,Len(fichierINI)-3,4)=EXTINI fichierINI="c:\lotus\domino\data\chkmail\"+fichierINI '// ici on récupère le document reçu afin de le traiter à l'issue Set docContext=session.DocumentContext '// code pour la Version 1 '//------------------------------------ '// on récupère les paramètres enregistrés dans le profil '// Set docProfile=dbMail.GetProfileDocument( "(ProfilCheck)" ) '// code pour version 2 '//--------------------------------- '// on accède aux paramètres via la base Check Mail Profiles ' Set dbParam=New NotesDataBase(dbMail.server,PARAMDB) '// On récupère le doc à partir de l'ID réplique de la base actuelle ' Set viewDbID=dbParam.getView(VUEDBID) ' Set docProfile=viewDbID.GetDocumentBykey(dbMail.replicaid) '// version 3 cas d'un fichier extérieur '// version retenue pour l'exemple '//------------------------------------------------------- Close If Dir$(fichierINI)=Null Then Print "Pas de fichier INI" noFileINI=True Exit Sub Else noFileINI=False End If '// lecture du fichier paramètres - version 3 Open fichierINI For Input As 1 Input #1, actif Input #1, seuil '// on lit le corps du message Redim texte(0) k=-1 While Not Eof(1) k=k+1 Redim Preserve texte(Ubound(texte)+1) Line Input #1,texte(k) Wend Close stopAgent=False Exit SuberrHandler: Print "Erreur n ° ";Err;" : ";Error$;" - ";Erl;" (initCommon)" stopAgent=True Resume finfin:End SubFunction analyzeMail() As Integer '// Fonction chargée d'analyser la taille du message reçu On Error Goto errHandler '// code pour la version 1 et 2 '//------------------------------------------- '// seuil=docProfile.steSeuil(0) '// pour information dans le Log 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 Print "Suppression du document en cours..." Call docContext.Remove(True) Print "Suppression du document effectuée correctement" 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 Set msg=New Mail() msg.Subject="REFUS : "+docContext.Subject(0) '// code de la version et 2 '// --------------------------------------- '// 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 Dim rtitem As NotesRichTextItem Dim docMailMe As NotesDocument Dim nn As NotesName On Error Goto errHandler '// 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 nn=New NotesName(docContext.From(0)) Set rtitem = docMailMe.CreateRichTextItem("body") Call rtitem.appendText (nn.Common+" 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
Bien à vous

http://www.dominoarea.org/oguruma/

Les téléphones PORTABLES dans les TGV y en a MARRRE de ces voyageurs qui ne respectent pas les autres ! ARRET DES PORTABLES SVP - Merci

Fumeurs ! respectez les non fumeurs !!!
Fumeurs ! respectez la loi de février 2007 et les lieux publics !!! (ie. hall de gares)
Avatar de l’utilisateur
oguruma
Super V.I.P.
Super V.I.P.
 
Message(s) : 4086
Inscrit(e) le : 16 Déc 2004 à 08:50
Localisation : LILLE

Retour vers Développement

cron